{ "cells": [ { "cell_type": "markdown", "id": "68e9310f-109d-4f30-b263-d1e6c058ee80", "metadata": {}, "source": [ "# Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "6805b3b5-782b-437c-82b3-9392abb5a599", "metadata": { "tags": [] }, "outputs": [], "source": [ "# %pip install -q -r requirements.txt" ] }, { "cell_type": "markdown", "id": "94f0fcdd-1653-440e-8ebc-9c33d931163a", "metadata": {}, "source": [ "## Config" ] }, { "cell_type": "code", "execution_count": 1, "id": "5d0bd22f-293e-4c15-9dfe-8070553f42b5", "metadata": { "tags": [] }, "outputs": [], "source": [ "INPUT_DATASET = 'derek-thomas/labeled-multiple-choice-explained-falcon-reasoning'\n", "REVISION = '536f3b8'\n", "OUTPUT_DATASET = 'derek-thomas/labeled-multiple-choice-explained-falcon-tokenized'" ] }, { "cell_type": "code", "execution_count": 2, "id": "a1fc7a29-6b60-446d-b708-012f897de6a9", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6b7b5851e4944f36a31679d28c6d60e4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(HTML(value='
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
formatted_questioncombined_factanswer_keytopicgpt3_5_reasoningquestion_textanswer_choicesfalcon_reasoning
0what is satellite technology used for predicti...satellite technology is used for predicting wh...cTechnologya) Seconds and minutes: This option is incorre...What is satellite technology used for predicting?(a) Seconds and minutes (b) The strength and m...- (a) Seconds and minutes: Satellite technolog...
1what does irradiating food do? (a) relieve pai...irradiated food improves food safety.cFood science(a) Relieve pain: This option is not correct b...What does irradiating food do?(a) Relieve pain (b) Enhance food's nutrients ...(a) Relieve pain: Irradiating food does not ha...
2what protects a mammal's skin? (a) fiber folli...fiber follicles protect mammal skinaBiologyb) Exfoliation: Exfoliation is the process of ...What protects a mammal's skin?(a) Fiber follicles (b) Exfoliation (c) Resist...(a) **Fiber follicles**: This is the correct a...
3what do earthworms do when a segment breaks of...earthworms can regrow segments that break offbBiologya) Dies: This option is not correct because ea...What do earthworms do when a segment breaks off?(a) Dies (b) Regrows it (c) Reproduces (d) Sed...1. **Option (a): Dies**\\n - Earthworms are s...
4lightning can be bad for what? (a) the environ...lightning can be bad for the environment.aElectricityb) Rainstorms: Lightning is actually a natural...Lightning can be bad for what?(a) The environment (b) Rainstorms (c) Destruc...(a) The environment: Lightning can release lar...
...........................
8408organisms that can cause infection do what? (a...organisms that can cause infection make humans...gBiologya) Bandaging open sores is not the correct ans...Organisms that can cause infection do what?(a) Bandage open sores (b) Keep flesh clean (c...(a) Bandage open sores: This action is typical...
8409fungi are living things that cannot make thei...fungi are living things that cannot make their...aBiologyb) Fungi are living things that can make their...Fungi are living things that cannot make their...(a) Food (b) Cells (c) Energy (d) Fruits (e) H...1. **Read the question and options carefully.*...
8410an overheated body can use water for: (a) meta...the evaporation of water from the skin cools t...gBiologya) Metabolic reaction: This option is incorrec...An overheated body can use water for:?(a) Metabolic reaction (b) Dehydrating (c) Rai...- (a) Metabolic reaction: This is incorrect be...
8411what is essential for cellular respiration for...plants are essential for cellular respiration ...fBiologya) Electrons are involved in cellular respirat...What is essential for cellular respiration for...(a) Electron (b) Glucose (c) Energy (d) Energy...1. **Glucose (b)**: Glucose is one of the reac...
8412what helps insulate and protect the body? (a) ...living cells in follicles help insulate and pr...bBiologya) H2O: Water is essential for life, but it do...What helps insulate and protect the body?(a) H2o (b) Living cells in follicles (c) Laye...1. **Read the question and options carefully.*...
\n", "

8413 rows × 8 columns

\n", "" ], "text/plain": [ " formatted_question \\\n", "0 what is satellite technology used for predicti... \n", "1 what does irradiating food do? (a) relieve pai... \n", "2 what protects a mammal's skin? (a) fiber folli... \n", "3 what do earthworms do when a segment breaks of... \n", "4 lightning can be bad for what? (a) the environ... \n", "... ... \n", "8408 organisms that can cause infection do what? (a... \n", "8409 fungi are living things that cannot make thei... \n", "8410 an overheated body can use water for: (a) meta... \n", "8411 what is essential for cellular respiration for... \n", "8412 what helps insulate and protect the body? (a) ... \n", "\n", " combined_fact answer_key \\\n", "0 satellite technology is used for predicting wh... c \n", "1 irradiated food improves food safety. c \n", "2 fiber follicles protect mammal skin a \n", "3 earthworms can regrow segments that break off b \n", "4 lightning can be bad for the environment. a \n", "... ... ... \n", "8408 organisms that can cause infection make humans... g \n", "8409 fungi are living things that cannot make their... a \n", "8410 the evaporation of water from the skin cools t... g \n", "8411 plants are essential for cellular respiration ... f \n", "8412 living cells in follicles help insulate and pr... b \n", "\n", " topic gpt3_5_reasoning \\\n", "0 Technology a) Seconds and minutes: This option is incorre... \n", "1 Food science (a) Relieve pain: This option is not correct b... \n", "2 Biology b) Exfoliation: Exfoliation is the process of ... \n", "3 Biology a) Dies: This option is not correct because ea... \n", "4 Electricity b) Rainstorms: Lightning is actually a natural... \n", "... ... ... \n", "8408 Biology a) Bandaging open sores is not the correct ans... \n", "8409 Biology b) Fungi are living things that can make their... \n", "8410 Biology a) Metabolic reaction: This option is incorrec... \n", "8411 Biology a) Electrons are involved in cellular respirat... \n", "8412 Biology a) H2O: Water is essential for life, but it do... \n", "\n", " question_text \\\n", "0 What is satellite technology used for predicting? \n", "1 What does irradiating food do? \n", "2 What protects a mammal's skin? \n", "3 What do earthworms do when a segment breaks off? \n", "4 Lightning can be bad for what? \n", "... ... \n", "8408 Organisms that can cause infection do what? \n", "8409 Fungi are living things that cannot make their... \n", "8410 An overheated body can use water for:? \n", "8411 What is essential for cellular respiration for... \n", "8412 What helps insulate and protect the body? \n", "\n", " answer_choices \\\n", "0 (a) Seconds and minutes (b) The strength and m... \n", "1 (a) Relieve pain (b) Enhance food's nutrients ... \n", "2 (a) Fiber follicles (b) Exfoliation (c) Resist... \n", "3 (a) Dies (b) Regrows it (c) Reproduces (d) Sed... \n", "4 (a) The environment (b) Rainstorms (c) Destruc... \n", "... ... \n", "8408 (a) Bandage open sores (b) Keep flesh clean (c... \n", "8409 (a) Food (b) Cells (c) Energy (d) Fruits (e) H... \n", "8410 (a) Metabolic reaction (b) Dehydrating (c) Rai... \n", "8411 (a) Electron (b) Glucose (c) Energy (d) Energy... \n", "8412 (a) H2o (b) Living cells in follicles (c) Laye... \n", "\n", " falcon_reasoning \n", "0 - (a) Seconds and minutes: Satellite technolog... \n", "1 (a) Relieve pain: Irradiating food does not ha... \n", "2 (a) **Fiber follicles**: This is the correct a... \n", "3 1. **Option (a): Dies**\\n - Earthworms are s... \n", "4 (a) The environment: Lightning can release lar... \n", "... ... \n", "8408 (a) Bandage open sores: This action is typical... \n", "8409 1. **Read the question and options carefully.*... \n", "8410 - (a) Metabolic reaction: This is incorrect be... \n", "8411 1. **Glucose (b)**: Glucose is one of the reac... \n", "8412 1. **Read the question and options carefully.*... \n", "\n", "[8413 rows x 8 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load dataset from Hugging Face Hub\n", "dataset = load_dataset(INPUT_DATASET, split='train')\n", "\n", "# Convert to pandas dataframe\n", "df = dataset.to_pandas()\n", "print(f\"Before Cleaning: {len(df)} rows\")\n", "print(df.columns)\n", "\n", "# Drop the __index_level_0__ column if it exists\n", "df.drop(columns=['falcon_reasoning_prompt'], errors='ignore', inplace=True)\n", "\n", "# Ensure all values in 'formatted_question' are strings\n", "df.rename(columns={\n", " 'explanation': 'gpt3_5_reasoning',\n", "}, inplace=True)\n", "\n", "# Fix formatting\n", "df['question_text'] = df['question_text'].str.replace('\"', '', regex=False)\n", "df['gpt3_5_reasoning'] = df['gpt3_5_reasoning'].str.replace('\"', \"'\", regex=False)\n", "df['falcon_reasoning'] = df['falcon_reasoning'].str.replace('\"', \"'\", regex=False)\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "2511bc04-f611-4dc7-b3ed-e477907b0200", "metadata": {}, "source": [ "## Create Prompts from Processed Data" ] }, { "cell_type": "markdown", "id": "d124c7cf-a369-46a9-94db-069894145959", "metadata": {}, "source": [ "We need to convert our sample into a format similar to below for each of the scenarios. This is ideal since we can use [chat templates](https://huggingface.co./docs/transformers/en/chat_templating) to easily switch models which might have different special tokens.\n", "\n", "```\n", "[\n", " {\"content\": system_prompt, \"role\": \"system\"},\n", " {\"content\": user_content, \"role\": \"user\"},\n", " {\"content\": assistant_response, \"role\": \"assistant\"}\n", "]\n", "```\n", "\n", "We should include a helpful `system_prompt` with a general trivia prefix, and a suffix that contains instructions that fit each scenario.\n", "The `user_content` will have the Question and answer choices.\n", "The `assistant_response` should reflect the scenario. " ] }, { "cell_type": "markdown", "id": "c85b3c11-18d7-4854-a0ba-ad0c1407fd6d", "metadata": {}, "source": [ "Its best to understand `template_blocks` in a couple layers. \n", "- The top layer (macro) allows me to decide which pieces I want to include. Sometimes I want just the `system`+`user` message, and for fine-tuning Ill want `system`+`user`+`assistant`\n", "- System+User:\n", " - Inside the this layer I use jinja to interpolate the values I want to add\n", " - I moved `user_content` out to get a feel for how it looks\n", "- Assistant:\n", " - Here we have an if statement to allow me to chose between FA, RFA and FAR\n", " - Inside that we just have the same interploation as seen elsewhere\n", "\n", "You can see in `initial` and `full` the json for the messages structure. Here Im selecting which macros I want to use." ] }, { "cell_type": "code", "execution_count": 6, "id": "f42f3c34-f736-4e1c-b904-418caf2b0de1", "metadata": {}, "outputs": [], "source": [ "from jinja2 import Environment, DictLoader\n", "\n", "template_blocks = '''\n", "{%- macro user_message(system_content, question_text, answer_choices) -%}\n", "{\n", " \"role\": \"system\",\n", " \"content\": {{ system_content }}\n", "},\n", "{\n", " \"role\": \"user\",\n", " \"content\": \"Question: {{ question_text }}\\\\nAnswer Choices: {{ answer_choices }}\"\n", "\n", "}\n", "{%- endmacro %}\n", "\n", "{% macro assistant_response(reasoning, answer_key, response_order='default') -%}\n", "{\n", " \"role\": \"assistant\",\n", " \"content\": {\n", " {% if response_order == 'rfa' -%}\n", " \"reasoning\": {{ reasoning | tojson }},\n", " \"final_answer\": \"{{ answer_key }}\"\n", " {% elif response_order == 'far' -%}\n", " \"final_answer\": \"{{ answer_key }}\",\n", " \"reasoning\": {{ reasoning | tojson }}\n", " {% else -%}\n", " \"final_answer\": \"{{ answer_key }}\"\n", " {% endif %}\n", " }\n", "}\n", "{%- endmacro %}\n", "'''\n", "\n", "# System + User only (initial template)\n", "initial = '''\n", "[\n", " {{ user_message(system_content, question_text, answer_choices) }}\n", "]\n", "'''\n", "\n", "# Full conversation template\n", "full = '''\n", "[\n", " {{ user_message(system_content, question_text, answer_choices) }},\n", " {{ assistant_response(reasoning, answer_key, response_order) }}\n", "]\n", "'''\n", "\n", "# Create Jinja environment and load templates\n", "env = Environment(loader=DictLoader({\n", " 'template_blocks': template_blocks,\n", " 'initial': initial,\n", " 'full': full\n", "}))\n", "\n", "# # Load the macro definitions into the environment\n", "macro_template = env.get_template('template_blocks')\n", "env.globals.update(macro_template.module.__dict__)\n", "\n", "# Compile full and initial templates\n", "full_template = env.get_template('full')\n", "initial_template = env.get_template('initial')" ] }, { "cell_type": "markdown", "id": "35b2b21b-6ecf-490d-a453-7d679e3b1877", "metadata": {}, "source": [ "### Reasoning Final Answer" ] }, { "cell_type": "code", "execution_count": 7, "id": "eccb2f71-70a9-41fc-8235-d58b8876bdf1", "metadata": {}, "outputs": [], "source": [ "rfa_system_content = 'Answer the Question and include your reasoning and the final answer in a json like: {\"reasoning\": , \"final_answer\": }.'\n", "rfa_system_content = json.dumps(rfa_system_content)\n", "\n", "# USER Prompt\n", "df['user_prompt_RFA'] = df.apply(lambda row: initial_template.render(\n", " system_content=rfa_system_content,\n", " question_text=row['question_text'],\n", " answer_choices=row['answer_choices']\n", "), axis=1)\n", "df['user_prompt_RFA'] = df['user_prompt_RFA'].apply(json.loads)" ] }, { "cell_type": "markdown", "id": "778538da-9290-4815-b792-6c632f3d398f", "metadata": {}, "source": [ "#### RFA ChatGPT 3.5 Example" ] }, { "cell_type": "code", "execution_count": 8, "id": "bb6bf32e-9d2c-40a4-a10c-c1c3df16bf1f", "metadata": { "scrolled": true }, "outputs": [], "source": [ "def generate_full_conversation(row, reasoning_key):\n", " rfa_template_input = {\n", " 'system_content': rfa_system_content,\n", " 'question_text': row['question_text'],\n", " 'answer_choices': row['answer_choices'],\n", " 'answer_key': row['answer_key'],\n", " 'response_order': 'rfa'\n", " }\n", " return full_template.render(**rfa_template_input, reasoning=row[reasoning_key])\n", "\n", "# Full Conversation GPT3.5\n", "df['conversation_RFA_gpt3_5'] = df.apply(lambda row: generate_full_conversation(row, 'gpt3_5_reasoning'), axis=1)\n", "df['conversation_RFA_gpt3_5'] = df['conversation_RFA_gpt3_5'].apply(json.loads)\n", "\n", "# Full Conversation Falcon\n", "df['conversation_RFA_falcon'] = df.apply(lambda row: generate_full_conversation(row, 'falcon_reasoning'), axis=1)\n", "df['conversation_RFA_falcon'] = df['conversation_RFA_falcon'].apply(json.loads)" ] }, { "cell_type": "code", "execution_count": 9, "id": "c22bae14-d5c2-4ed0-8d52-f98d6a4f24b2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Answer the Question and include your reasoning and the final answer in a json like: {\"reasoning\": , \"final_answer\": }.\n", "---\n", "Question: What is satellite technology used for predicting?\n", "Answer Choices: (a) Seconds and minutes (b) The strength and magnitude of an earthquake (c) What it's like outside each day (d) 70-75 degrees fahrenheit (e) Rapid changes occur (f) Dead-ends and false starts. (g) Snow, ice, and rock (h) Around 5 to 27 degrees celsius\n", "---\n", "dict_keys(['reasoning', 'final_answer'])\n", "---\n", "a) Seconds and minutes: This option is incorrect because satellite technology is not used for predicting time intervals. Satellite technology is used for various purposes such as communication, navigation, and weather forecasting, but it is not used for predicting time intervals.\n", "\n", "b) The strength and magnitude of an earthquake: This option is incorrect because satellite technology is not used for predicting earthquakes. Earthquake prediction is a complex process that involves seismology and other scientific methods, but satellite technology is not one of them.\n", "\n", "d) 70-75 degrees Fahrenheit: This option is incorrect because satellite technology is not used for predicting specific temperature ranges. While satellite technology can provide temperature data, it is not used for predicting specific temperature ranges.\n", "\n", "e) Rapid changes occur: This option is too vague and does not provide enough information to determine whether it is correct or not. Satellite technology can be used to monitor changes in various environmental factors, but it is not used specifically for predicting rapid changes.\n", "\n", "f) Dead-ends and false starts: This option is incorrect because it is not related to satellite technology or any type of prediction.\n", "\n", "g) Snow, ice, and rock: This option is incorrect because it is too specific and does not cover the broad range of predictions that satellite technology can be used for. While satellite technology can be used to monitor snow, ice, and rock formations, it is not used exclusively for this purpose.\n", "\n", "h) Around 5 to 27 degrees Celsius: This option is incorrect because it is too specific and does not cover the broad range of temperature predictions that satellite technology can be used for. While satellite technology can provide temperature data, it is not used exclusively for predicting temperatures within a specific range.\n", "\n", "Therefore, the correct answer is c) what it's like outside each day, as satellite technology is commonly used for weather forecasting and predicting daily weather conditions.\n" ] } ], "source": [ "rfa_test_row = df.conversation_RFA_gpt3_5.iloc[0]\n", "print(rfa_test_row[0]['content'])\n", "print('---')\n", "print(rfa_test_row[1]['content'])\n", "print('---')\n", "print(rfa_test_row[2]['content'].keys())\n", "print('---')\n", "print(rfa_test_row[2]['content']['reasoning'])" ] }, { "cell_type": "markdown", "id": "5f1ca469-473f-423d-b673-a7e7278f9bbb", "metadata": {}, "source": [ "#### RFA Falcon Example" ] }, { "cell_type": "code", "execution_count": 10, "id": "f6b86fc1-beb0-40c8-9293-0824b7926b7b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Answer the Question and include your reasoning and the final answer in a json like: {\"reasoning\": , \"final_answer\": }.\n", "---\n", "Question: What is satellite technology used for predicting?\n", "Answer Choices: (a) Seconds and minutes (b) The strength and magnitude of an earthquake (c) What it's like outside each day (d) 70-75 degrees fahrenheit (e) Rapid changes occur (f) Dead-ends and false starts. (g) Snow, ice, and rock (h) Around 5 to 27 degrees celsius\n", "---\n", "dict_keys(['reasoning', 'final_answer'])\n", "---\n", "- (a) Seconds and minutes: Satellite technology is not used to predict seconds and minutes. This is too specific and not what satellite technology is generally used for. Satellite technology is used for broader time scales, such as days, weeks, months, and years.\n", "- (b) The strength and magnitude of an earthquake: While some types of satellite data can be used in conjunction with other information to study seismicity, earthquakes themselves are typically predicted using other methods, like seismographs and geological studies.\n", "- (d) 70-75 degrees fahrenheit: This is a specific temperature range, and satellites cannot predict exact temperature ranges like this. While satellites do play a role in weather prediction, which includes temperature, predicting specific ranges within a day isn't a typical application.\n", "- (e) Rapid changes occur: While satellites can detect rapid changes in many areas, such as cloud cover, weather fronts, or volcanic activity, the phrase 'rapid changes occur' is too vague. It could apply to various phenomena, so it's not specifically about predictions related to satellite technology alone.\n", "- (f) Dead-ends and false starts: These descriptions relate to human behavior and decision-making processes, not predictions associated with satellite technology.\n", "- (g) Snow, ice, and rock: This is a very specific combination of weather and geological features. While satellite technology can certainly be used to monitor snow, ice, and rock & soil changes (for landslide detection, for example), it's not specifically about predicting these phenomena in the way the question suggests.\n", "- (h) Around 5 to 27 degrees celsius: Similar to (d), this is a specific temperature range, and satellites alone cannot predict specific temperature ranges so precisely.\n", "\n", "The correct answer, (c) What it's like outside each day, touches on a broader range of environmental conditions, which satellite technology can provide data on. Satellites track weather patterns, cloud cover, sunlight, and other indicators that give us an idea of the outside conditions almost daily. \n", "\n", "This broad, daily overview of environmental conditions is something that satellites can provide, unlike the more narrow and specific predictions mentioned in the other options. Although it's not a technical 'prediction' in the sense of forecasting exact events all the time, it does provide up-to-date and current information about what it's like outside, which can be used to make informed decisions and inform other predictions related to weather and environment.\n" ] } ], "source": [ "rfa_test_row = df.conversation_RFA_falcon.iloc[0]\n", "print(rfa_test_row[0]['content'])\n", "print('---')\n", "print(rfa_test_row[1]['content'])\n", "print('---')\n", "print(rfa_test_row[2]['content'].keys())\n", "print('---')\n", "print(rfa_test_row[2]['content']['reasoning'])" ] }, { "cell_type": "markdown", "id": "e475bc17-03b4-45b7-9188-f60110325eff", "metadata": {}, "source": [ "At this point we should feel pretty comfortable with our prompt, lets repeat this for `FAR` and `FA`." ] }, { "cell_type": "markdown", "id": "a1150ae9-cc22-44c6-8a36-0e3d7c16111b", "metadata": {}, "source": [ "### Final Answer Reasoning" ] }, { "cell_type": "code", "execution_count": 11, "id": "e5437ce4-f6be-4b0e-88e8-d87f8256945e", "metadata": {}, "outputs": [], "source": [ "far_system_content = 'Answer the Question and include your Final Answer and the Reasoning in a json like: {\"final_answer\": , \"reasoning\": }.'\n", "far_system_content = json.dumps(far_system_content)\n", "\n", "# USER Prompt\n", "df['user_prompt_FAR'] = df.apply(lambda row: initial_template.render(\n", " system_content=far_system_content,\n", " question_text=row['question_text'],\n", " answer_choices=row['answer_choices']\n", "), axis=1)\n", "df['user_prompt_FAR'] = df['user_prompt_FAR'].apply(json.loads)" ] }, { "cell_type": "code", "execution_count": 12, "id": "f3393931-e8d8-48d7-8734-a6a8f6afc032", "metadata": { "scrolled": true }, "outputs": [], "source": [ "def generate_full_conversation(row, reasoning_key):\n", " far_template_input = {\n", " 'system_content': far_system_content,\n", " 'question_text': row['question_text'],\n", " 'answer_choices': row['answer_choices'],\n", " 'answer_key': row['answer_key'],\n", " 'response_order': 'far'\n", " }\n", " return full_template.render(**far_template_input, reasoning=row[reasoning_key])\n", "\n", "# Full Conversation GPT3.5\n", "df['conversation_FAR_gpt3_5'] = df.apply(lambda row: generate_full_conversation(row, 'gpt3_5_reasoning'), axis=1)\n", "df['conversation_FAR_gpt3_5'] = df['conversation_FAR_gpt3_5'].apply(json.loads)\n", "\n", "# Full Conversation Falcon\n", "df['conversation_FAR_falcon'] = df.apply(lambda row: generate_full_conversation(row, 'falcon_reasoning'), axis=1)\n", "df['conversation_FAR_falcon'] = df['conversation_FAR_falcon'].apply(json.loads)" ] }, { "cell_type": "markdown", "id": "ef90916f-c37e-4684-9ce6-f89e08158403", "metadata": {}, "source": [ "#### FAR ChatGPT 3.5 Example" ] }, { "cell_type": "code", "execution_count": 13, "id": "24dcc34d-6c78-42bb-b24f-ee715f27f405", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Answer the Question and include your Final Answer and the Reasoning in a json like: {\"final_answer\": , \"reasoning\": }.\n", "---\n", "Question: What is satellite technology used for predicting?\n", "Answer Choices: (a) Seconds and minutes (b) The strength and magnitude of an earthquake (c) What it's like outside each day (d) 70-75 degrees fahrenheit (e) Rapid changes occur (f) Dead-ends and false starts. (g) Snow, ice, and rock (h) Around 5 to 27 degrees celsius\n", "---\n", "dict_keys(['final_answer', 'reasoning'])\n", "---\n", "a) Seconds and minutes: This option is incorrect because satellite technology is not used for predicting time intervals. Satellite technology is used for various purposes such as communication, navigation, and weather forecasting, but it is not used for predicting time intervals.\n", "\n", "b) The strength and magnitude of an earthquake: This option is incorrect because satellite technology is not used for predicting earthquakes. Earthquake prediction is a complex process that involves seismology and other scientific methods, but satellite technology is not one of them.\n", "\n", "d) 70-75 degrees Fahrenheit: This option is incorrect because satellite technology is not used for predicting specific temperature ranges. While satellite technology can provide temperature data, it is not used for predicting specific temperature ranges.\n", "\n", "e) Rapid changes occur: This option is too vague and does not provide enough information to determine whether it is correct or not. Satellite technology can be used to monitor changes in various environmental factors, but it is not used specifically for predicting rapid changes.\n", "\n", "f) Dead-ends and false starts: This option is incorrect because it is not related to satellite technology or any type of prediction.\n", "\n", "g) Snow, ice, and rock: This option is incorrect because it is too specific and does not cover the broad range of predictions that satellite technology can be used for. While satellite technology can be used to monitor snow, ice, and rock formations, it is not used exclusively for this purpose.\n", "\n", "h) Around 5 to 27 degrees Celsius: This option is incorrect because it is too specific and does not cover the broad range of temperature predictions that satellite technology can be used for. While satellite technology can provide temperature data, it is not used exclusively for predicting temperatures within a specific range.\n", "\n", "Therefore, the correct answer is c) what it's like outside each day, as satellite technology is commonly used for weather forecasting and predicting daily weather conditions.\n" ] } ], "source": [ "far_test_row = df.conversation_FAR_gpt3_5.iloc[0]\n", "print(far_test_row[0]['content'])\n", "print('---')\n", "print(far_test_row[1]['content'])\n", "print('---')\n", "print(far_test_row[2]['content'].keys())\n", "print('---')\n", "print(far_test_row[2]['content']['reasoning'])" ] }, { "cell_type": "markdown", "id": "f76c6fd3-149e-4db1-b333-8e2c451286cb", "metadata": {}, "source": [ "#### FAR Falcon Example" ] }, { "cell_type": "code", "execution_count": 14, "id": "c28f8e7e-bce0-4855-9d25-42a1f5e9b0cd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Answer the Question and include your Final Answer and the Reasoning in a json like: {\"final_answer\": , \"reasoning\": }.\n", "---\n", "Question: What is satellite technology used for predicting?\n", "Answer Choices: (a) Seconds and minutes (b) The strength and magnitude of an earthquake (c) What it's like outside each day (d) 70-75 degrees fahrenheit (e) Rapid changes occur (f) Dead-ends and false starts. (g) Snow, ice, and rock (h) Around 5 to 27 degrees celsius\n", "---\n", "dict_keys(['final_answer', 'reasoning'])\n", "---\n", "- (a) Seconds and minutes: Satellite technology is not used to predict seconds and minutes. This is too specific and not what satellite technology is generally used for. Satellite technology is used for broader time scales, such as days, weeks, months, and years.\n", "- (b) The strength and magnitude of an earthquake: While some types of satellite data can be used in conjunction with other information to study seismicity, earthquakes themselves are typically predicted using other methods, like seismographs and geological studies.\n", "- (d) 70-75 degrees fahrenheit: This is a specific temperature range, and satellites cannot predict exact temperature ranges like this. While satellites do play a role in weather prediction, which includes temperature, predicting specific ranges within a day isn't a typical application.\n", "- (e) Rapid changes occur: While satellites can detect rapid changes in many areas, such as cloud cover, weather fronts, or volcanic activity, the phrase 'rapid changes occur' is too vague. It could apply to various phenomena, so it's not specifically about predictions related to satellite technology alone.\n", "- (f) Dead-ends and false starts: These descriptions relate to human behavior and decision-making processes, not predictions associated with satellite technology.\n", "- (g) Snow, ice, and rock: This is a very specific combination of weather and geological features. While satellite technology can certainly be used to monitor snow, ice, and rock & soil changes (for landslide detection, for example), it's not specifically about predicting these phenomena in the way the question suggests.\n", "- (h) Around 5 to 27 degrees celsius: Similar to (d), this is a specific temperature range, and satellites alone cannot predict specific temperature ranges so precisely.\n", "\n", "The correct answer, (c) What it's like outside each day, touches on a broader range of environmental conditions, which satellite technology can provide data on. Satellites track weather patterns, cloud cover, sunlight, and other indicators that give us an idea of the outside conditions almost daily. \n", "\n", "This broad, daily overview of environmental conditions is something that satellites can provide, unlike the more narrow and specific predictions mentioned in the other options. Although it's not a technical 'prediction' in the sense of forecasting exact events all the time, it does provide up-to-date and current information about what it's like outside, which can be used to make informed decisions and inform other predictions related to weather and environment.\n" ] } ], "source": [ "far_test_row = df.conversation_FAR_falcon.iloc[0]\n", "print(far_test_row[0]['content'])\n", "print('---')\n", "print(far_test_row[1]['content'])\n", "print('---')\n", "print(far_test_row[2]['content'].keys())\n", "print('---')\n", "print(far_test_row[2]['content']['reasoning'])" ] }, { "cell_type": "markdown", "id": "2c9f0619-1467-4b4e-ad69-b5ca2c4e58a7", "metadata": {}, "source": [ "### Final Answer" ] }, { "cell_type": "code", "execution_count": 15, "id": "5a48d4a6-66bd-4941-9227-720fb7cde805", "metadata": {}, "outputs": [], "source": [ "fa_system_content = 'Answer the Question and include your Final Answer in a json like: {\"final_answer\": }.'\n", "fa_system_content = json.dumps(fa_system_content)\n", "\n", "# USER Prompt\n", "df['user_prompt_FA'] = df.apply(lambda row: initial_template.render(\n", " system_content=fa_system_content,\n", " question_text=row['question_text'],\n", " answer_choices=row['answer_choices']\n", "), axis=1)\n", "df['user_prompt_FA'] = df['user_prompt_FA'].apply(json.loads)" ] }, { "cell_type": "code", "execution_count": 16, "id": "23498249-1bee-424c-a0a2-db282c4e60b5", "metadata": { "scrolled": true }, "outputs": [], "source": [ "def generate_full_conversation(row):\n", " fa_template_input = {\n", " 'system_content': fa_system_content,\n", " 'question_text': row['question_text'],\n", " 'answer_choices': row['answer_choices'],\n", " 'answer_key': row['answer_key'],\n", " 'response_order': 'fa'\n", " }\n", " return full_template.render(**fa_template_input)\n", "\n", "# Full Conversation GPT3.5\n", "df['conversation_FA'] = df.apply(lambda row: generate_full_conversation(row), axis=1)\n", "df['conversation_FA'] = df['conversation_FA'].apply(json.loads)\n" ] }, { "cell_type": "markdown", "id": "0afbe045-4361-4f92-92a0-243029151a43", "metadata": {}, "source": [ "#### FA Example" ] }, { "cell_type": "code", "execution_count": 17, "id": "9b37bcf3-0a6a-41b4-934f-932687181947", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Answer the Question and include your Final Answer in a json like: {\"final_answer\": }.\n", "---\n", "Question: What is satellite technology used for predicting?\n", "Answer Choices: (a) Seconds and minutes (b) The strength and magnitude of an earthquake (c) What it's like outside each day (d) 70-75 degrees fahrenheit (e) Rapid changes occur (f) Dead-ends and false starts. (g) Snow, ice, and rock (h) Around 5 to 27 degrees celsius\n", "---\n", "{'final_answer': 'c'}\n" ] } ], "source": [ "fa_test_row = df.conversation_FA.iloc[0]\n", "print(fa_test_row[0]['content'])\n", "print('---')\n", "print(fa_test_row[1]['content'])\n", "print('---')\n", "print(fa_test_row[2]['content'])" ] }, { "cell_type": "markdown", "id": "ad51b99b-cf67-43d8-833c-5ec57d9d4613", "metadata": {}, "source": [ "### Cleanup" ] }, { "cell_type": "code", "execution_count": 18, "id": "69a687d5-35ab-4abb-8bb8-f975fa7be3f7", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Index(['formatted_question', 'combined_fact', 'answer_key', 'topic',\n", " 'gpt3_5_reasoning', 'question_text', 'answer_choices',\n", " 'falcon_reasoning', 'user_prompt_RFA', 'conversation_RFA_gpt3_5',\n", " 'conversation_RFA_falcon', 'user_prompt_FAR', 'conversation_FAR_gpt3_5',\n", " 'conversation_FAR_falcon', 'user_prompt_FA', 'conversation_FA'],\n", " dtype='object')" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "code", "execution_count": 19, "id": "6ec3b6b5-a359-4da8-98c8-4dae75b8a2d4", "metadata": { "tags": [] }, "outputs": [], "source": [ "df = df[['topic', 'question_text', 'answer_key', 'gpt3_5_reasoning', 'falcon_reasoning', 'answer_choices',\n", " 'user_prompt_RFA', 'conversation_RFA_gpt3_5', 'conversation_RFA_falcon',\n", " 'user_prompt_FAR', 'conversation_FAR_gpt3_5', 'conversation_FAR_falcon',\n", " 'user_prompt_FA', 'conversation_FA']]" ] }, { "cell_type": "code", "execution_count": 20, "id": "f9f3a5a8-e4ea-4ed9-9fc0-fdd1a19b1c92", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
topicquestion_textanswer_keygpt3_5_reasoningfalcon_reasoninganswer_choicesuser_prompt_RFAconversation_RFA_gpt3_5conversation_RFA_falconuser_prompt_FARconversation_FAR_gpt3_5conversation_FAR_falconuser_prompt_FAconversation_FA
0TechnologyWhat is satellite technology used for predicting?ca) Seconds and minutes: This option is incorre...- (a) Seconds and minutes: Satellite technolog...(a) Seconds and minutes (b) The strength and m...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
1Food scienceWhat does irradiating food do?c(a) Relieve pain: This option is not correct b...(a) Relieve pain: Irradiating food does not ha...(a) Relieve pain (b) Enhance food's nutrients ...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
2BiologyWhat protects a mammal's skin?ab) Exfoliation: Exfoliation is the process of ...(a) **Fiber follicles**: This is the correct a...(a) Fiber follicles (b) Exfoliation (c) Resist...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
3BiologyWhat do earthworms do when a segment breaks off?ba) Dies: This option is not correct because ea...1. **Option (a): Dies**\\n - Earthworms are s...(a) Dies (b) Regrows it (c) Reproduces (d) Sed...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
4ElectricityLightning can be bad for what?ab) Rainstorms: Lightning is actually a natural...(a) The environment: Lightning can release lar...(a) The environment (b) Rainstorms (c) Destruc...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
.............................................
8408BiologyOrganisms that can cause infection do what?ga) Bandaging open sores is not the correct ans...(a) Bandage open sores: This action is typical...(a) Bandage open sores (b) Keep flesh clean (c...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
8409BiologyFungi are living things that cannot make their...ab) Fungi are living things that can make their...1. **Read the question and options carefully.*...(a) Food (b) Cells (c) Energy (d) Fruits (e) H...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
8410BiologyAn overheated body can use water for:?ga) Metabolic reaction: This option is incorrec...- (a) Metabolic reaction: This is incorrect be...(a) Metabolic reaction (b) Dehydrating (c) Rai...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
8411BiologyWhat is essential for cellular respiration for...fa) Electrons are involved in cellular respirat...1. **Glucose (b)**: Glucose is one of the reac...(a) Electron (b) Glucose (c) Energy (d) Energy...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
8412BiologyWhat helps insulate and protect the body?ba) H2O: Water is essential for life, but it do...1. **Read the question and options carefully.*...(a) H2o (b) Living cells in follicles (c) Laye...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...[{'role': 'system', 'content': 'Answer the Que...
\n", "

8413 rows × 14 columns

\n", "
" ], "text/plain": [ " topic question_text \\\n", "0 Technology What is satellite technology used for predicting? \n", "1 Food science What does irradiating food do? \n", "2 Biology What protects a mammal's skin? \n", "3 Biology What do earthworms do when a segment breaks off? \n", "4 Electricity Lightning can be bad for what? \n", "... ... ... \n", "8408 Biology Organisms that can cause infection do what? \n", "8409 Biology Fungi are living things that cannot make their... \n", "8410 Biology An overheated body can use water for:? \n", "8411 Biology What is essential for cellular respiration for... \n", "8412 Biology What helps insulate and protect the body? \n", "\n", " answer_key gpt3_5_reasoning \\\n", "0 c a) Seconds and minutes: This option is incorre... \n", "1 c (a) Relieve pain: This option is not correct b... \n", "2 a b) Exfoliation: Exfoliation is the process of ... \n", "3 b a) Dies: This option is not correct because ea... \n", "4 a b) Rainstorms: Lightning is actually a natural... \n", "... ... ... \n", "8408 g a) Bandaging open sores is not the correct ans... \n", "8409 a b) Fungi are living things that can make their... \n", "8410 g a) Metabolic reaction: This option is incorrec... \n", "8411 f a) Electrons are involved in cellular respirat... \n", "8412 b a) H2O: Water is essential for life, but it do... \n", "\n", " falcon_reasoning \\\n", "0 - (a) Seconds and minutes: Satellite technolog... \n", "1 (a) Relieve pain: Irradiating food does not ha... \n", "2 (a) **Fiber follicles**: This is the correct a... \n", "3 1. **Option (a): Dies**\\n - Earthworms are s... \n", "4 (a) The environment: Lightning can release lar... \n", "... ... \n", "8408 (a) Bandage open sores: This action is typical... \n", "8409 1. **Read the question and options carefully.*... \n", "8410 - (a) Metabolic reaction: This is incorrect be... \n", "8411 1. **Glucose (b)**: Glucose is one of the reac... \n", "8412 1. **Read the question and options carefully.*... \n", "\n", " answer_choices \\\n", "0 (a) Seconds and minutes (b) The strength and m... \n", "1 (a) Relieve pain (b) Enhance food's nutrients ... \n", "2 (a) Fiber follicles (b) Exfoliation (c) Resist... \n", "3 (a) Dies (b) Regrows it (c) Reproduces (d) Sed... \n", "4 (a) The environment (b) Rainstorms (c) Destruc... \n", "... ... \n", "8408 (a) Bandage open sores (b) Keep flesh clean (c... \n", "8409 (a) Food (b) Cells (c) Energy (d) Fruits (e) H... \n", "8410 (a) Metabolic reaction (b) Dehydrating (c) Rai... \n", "8411 (a) Electron (b) Glucose (c) Energy (d) Energy... \n", "8412 (a) H2o (b) Living cells in follicles (c) Laye... \n", "\n", " user_prompt_RFA \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " conversation_RFA_gpt3_5 \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " conversation_RFA_falcon \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " user_prompt_FAR \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " conversation_FAR_gpt3_5 \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " conversation_FAR_falcon \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " user_prompt_FA \\\n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", " conversation_FA \n", "0 [{'role': 'system', 'content': 'Answer the Que... \n", "1 [{'role': 'system', 'content': 'Answer the Que... \n", "2 [{'role': 'system', 'content': 'Answer the Que... \n", "3 [{'role': 'system', 'content': 'Answer the Que... \n", "4 [{'role': 'system', 'content': 'Answer the Que... \n", "... ... \n", "8408 [{'role': 'system', 'content': 'Answer the Que... \n", "8409 [{'role': 'system', 'content': 'Answer the Que... \n", "8410 [{'role': 'system', 'content': 'Answer the Que... \n", "8411 [{'role': 'system', 'content': 'Answer the Que... \n", "8412 [{'role': 'system', 'content': 'Answer the Que... \n", "\n", "[8413 rows x 14 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "id": "7bb68a90-f430-4a09-a3f9-118f91f68bd2", "metadata": {}, "source": [ "### Datasets Format\n", "\n", "We want to push this to the hub for storage, but there is a catch in our format... alas content is a `dict` right now for the \"assistant\". In \"system\" and \"user\" its a string. `Datasets` is based on parquet/arrow which require columns of fixed types, meaning content should always be a str or a dict. Ill cast it to str for simplicity." ] }, { "cell_type": "code", "execution_count": 21, "id": "3ed415c2-cdc7-4549-8edf-98030cb7c61c", "metadata": {}, "outputs": [], "source": [ "cols_to_cast = ['conversation_RFA_gpt3_5', 'conversation_RFA_falcon', 'conversation_FAR_gpt3_5', 'conversation_FAR_falcon', 'conversation_FA']\n", "\n", "def cast_content_keys_to_string(conversation):\n", " user_dict = conversation[2]\n", " user_dict['content'] = json.dumps(user_dict['content'])\n", " return conversation\n", "\n", "# Apply the function to all columns\n", "for col in cols_to_cast:\n", " df.loc[:, col] = df[col].apply(lambda x: cast_content_keys_to_string(x))" ] }, { "cell_type": "markdown", "id": "9fe52e77-0985-49d4-964e-7a17372d7007", "metadata": {}, "source": [ "## Explore Prompts\n", "Gradio can be really useful for quick inline apps. Here I want to make sure everything is as I expect.\n", "\n", "While the above print statements helped me see the format, the gradio app helps me explore a large volume of output easily. \n", "\n", "Note: Its tricky as I cant easily render newlines in strings. So be careful!" ] }, { "cell_type": "code", "execution_count": 22, "id": "7903b9e7-36ee-463a-be38-06ee2614be1d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", " import json\n", " import gradio as gr\n", " import pandas as pd\n", " import base64\n", "\n", " encoded_data = \"eyJjb252ZXJzYXRpb25fUkZBX2dwdDNfNSI6IHsiMCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgaXMgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgdXNlZCBmb3IgcHJlZGljdGluZz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU2Vjb25kcyBhbmQgbWludXRlcyAoYikgVGhlIHN0cmVuZ3RoIGFuZCBtYWduaXR1ZGUgb2YgYW4gZWFydGhxdWFrZSAoYykgV2hhdCBpdCdzIGxpa2Ugb3V0c2lkZSBlYWNoIGRheSAoZCkgNzAtNzUgZGVncmVlcyBmYWhyZW5oZWl0IChlKSBSYXBpZCBjaGFuZ2VzIG9jY3VyIChmKSBEZWFkLWVuZHMgYW5kIGZhbHNlIHN0YXJ0cy4gKGcpIFNub3csIGljZSwgYW5kIHJvY2sgKGgpIEFyb3VuZCA1IHRvIDI3IGRlZ3JlZXMgY2Vsc2l1cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiYSkgU2Vjb25kcyBhbmQgbWludXRlczogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2Ugc2F0ZWxsaXRlIHRlY2hub2xvZ3kgaXMgbm90IHVzZWQgZm9yIHByZWRpY3RpbmcgdGltZSBpbnRlcnZhbHMuIFNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMgc3VjaCBhcyBjb21tdW5pY2F0aW9uLCBuYXZpZ2F0aW9uLCBhbmQgd2VhdGhlciBmb3JlY2FzdGluZywgYnV0IGl0IGlzIG5vdCB1c2VkIGZvciBwcmVkaWN0aW5nIHRpbWUgaW50ZXJ2YWxzLlxcblxcbmIpIFRoZSBzdHJlbmd0aCBhbmQgbWFnbml0dWRlIG9mIGFuIGVhcnRocXVha2U6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIG5vdCB1c2VkIGZvciBwcmVkaWN0aW5nIGVhcnRocXVha2VzLiBFYXJ0aHF1YWtlIHByZWRpY3Rpb24gaXMgYSBjb21wbGV4IHByb2Nlc3MgdGhhdCBpbnZvbHZlcyBzZWlzbW9sb2d5IGFuZCBvdGhlciBzY2llbnRpZmljIG1ldGhvZHMsIGJ1dCBzYXRlbGxpdGUgdGVjaG5vbG9neSBpcyBub3Qgb25lIG9mIHRoZW0uXFxuXFxuZCkgNzAtNzUgZGVncmVlcyBGYWhyZW5oZWl0OiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBzYXRlbGxpdGUgdGVjaG5vbG9neSBpcyBub3QgdXNlZCBmb3IgcHJlZGljdGluZyBzcGVjaWZpYyB0ZW1wZXJhdHVyZSByYW5nZXMuIFdoaWxlIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGNhbiBwcm92aWRlIHRlbXBlcmF0dXJlIGRhdGEsIGl0IGlzIG5vdCB1c2VkIGZvciBwcmVkaWN0aW5nIHNwZWNpZmljIHRlbXBlcmF0dXJlIHJhbmdlcy5cXG5cXG5lKSBSYXBpZCBjaGFuZ2VzIG9jY3VyOiBUaGlzIG9wdGlvbiBpcyB0b28gdmFndWUgYW5kIGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGNvcnJlY3Qgb3Igbm90LiBTYXRlbGxpdGUgdGVjaG5vbG9neSBjYW4gYmUgdXNlZCB0byBtb25pdG9yIGNoYW5nZXMgaW4gdmFyaW91cyBlbnZpcm9ubWVudGFsIGZhY3RvcnMsIGJ1dCBpdCBpcyBub3QgdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHByZWRpY3RpbmcgcmFwaWQgY2hhbmdlcy5cXG5cXG5mKSBEZWFkLWVuZHMgYW5kIGZhbHNlIHN0YXJ0czogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgaXQgaXMgbm90IHJlbGF0ZWQgdG8gc2F0ZWxsaXRlIHRlY2hub2xvZ3kgb3IgYW55IHR5cGUgb2YgcHJlZGljdGlvbi5cXG5cXG5nKSBTbm93LCBpY2UsIGFuZCByb2NrOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBpcyB0b28gc3BlY2lmaWMgYW5kIGRvZXMgbm90IGNvdmVyIHRoZSBicm9hZCByYW5nZSBvZiBwcmVkaWN0aW9ucyB0aGF0IHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGNhbiBiZSB1c2VkIGZvci4gV2hpbGUgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgY2FuIGJlIHVzZWQgdG8gbW9uaXRvciBzbm93LCBpY2UsIGFuZCByb2NrIGZvcm1hdGlvbnMsIGl0IGlzIG5vdCB1c2VkIGV4Y2x1c2l2ZWx5IGZvciB0aGlzIHB1cnBvc2UuXFxuXFxuaCkgQXJvdW5kIDUgdG8gMjcgZGVncmVlcyBDZWxzaXVzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBpcyB0b28gc3BlY2lmaWMgYW5kIGRvZXMgbm90IGNvdmVyIHRoZSBicm9hZCByYW5nZSBvZiB0ZW1wZXJhdHVyZSBwcmVkaWN0aW9ucyB0aGF0IHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGNhbiBiZSB1c2VkIGZvci4gV2hpbGUgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgY2FuIHByb3ZpZGUgdGVtcGVyYXR1cmUgZGF0YSwgaXQgaXMgbm90IHVzZWQgZXhjbHVzaXZlbHkgZm9yIHByZWRpY3RpbmcgdGVtcGVyYXR1cmVzIHdpdGhpbiBhIHNwZWNpZmljIHJhbmdlLlxcblxcblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGMpIHdoYXQgaXQncyBsaWtlIG91dHNpZGUgZWFjaCBkYXksIGFzIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIGNvbW1vbmx5IHVzZWQgZm9yIHdlYXRoZXIgZm9yZWNhc3RpbmcgYW5kIHByZWRpY3RpbmcgZGFpbHkgd2VhdGhlciBjb25kaXRpb25zLlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImNcIn0ifV0sICIxIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBkb2VzIGlycmFkaWF0aW5nIGZvb2QgZG8/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFJlbGlldmUgcGFpbiAoYikgRW5oYW5jZSBmb29kJ3MgbnV0cmllbnRzIChjKSBJbXByb3ZlcyBmb29kIHNhZmV0eSAoZCkgQWxsb3dzIGdyb3d0aCBvZiBiYWN0ZXJpYSAoZSkgSW5jcmVhc2VzIGZvb2Qgd2FzdGUgKGYpIENoZW1pY2FsIGNoYW5nZXMgKGcpIEdldCBjaGVtaWNhbCByZWFjdGlvbnMgc3RhcnRlZCAoaCkgTWFqb3IgdGhyZWF0IHRvIGhlYWx0aCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiKGEpIFJlbGlldmUgcGFpbjogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGluZyBmb29kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggcmVsaWV2aW5nIHBhaW4uIElycmFkaWF0aW9uIGlzIGEgcHJvY2VzcyBvZiBleHBvc2luZyBmb29kIHRvIGlvbml6aW5nIHJhZGlhdGlvbiB0byBraWxsIGJhY3RlcmlhLCB2aXJ1c2VzLCBhbmQgb3RoZXIgcGF0aG9nZW5zIHRoYXQgbWF5IGJlIHByZXNlbnQgaW4gdGhlIGZvb2QuIEl0IGlzIG5vdCBhIHBhaW4gcmVsaWV2ZXIuXFxuXFxuKGIpIEVuaGFuY2UgZm9vZCdzIG51dHJpZW50czogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGluZyBmb29kIGRvZXMgbm90IGVuaGFuY2UgdGhlIGZvb2QncyBudXRyaWVudHMuIEluIGZhY3QsIHNvbWUgc3R1ZGllcyBoYXZlIHNob3duIHRoYXQgaXJyYWRpYXRpb24gY2FuIGNhdXNlIGEgc2xpZ2h0IGxvc3Mgb2YgY2VydGFpbiB2aXRhbWlucyBpbiBmb29kLiBIb3dldmVyLCB0aGUgbG9zcyBpcyBub3Qgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIGFmZmVjdCB0aGUgb3ZlcmFsbCBudXRyaXRpb25hbCB2YWx1ZSBvZiB0aGUgZm9vZC5cXG5cXG4oZCkgQWxsb3dzIGdyb3d0aCBvZiBiYWN0ZXJpYTogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGluZyBmb29kIGFjdHVhbGx5IGtpbGxzIGJhY3RlcmlhIGFuZCBvdGhlciBwYXRob2dlbnMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgZm9vZC4gSXQgZG9lcyBub3QgYWxsb3cgdGhlIGdyb3d0aCBvZiBiYWN0ZXJpYS5cXG5cXG4oZSkgSW5jcmVhc2VzIGZvb2Qgd2FzdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgaXJyYWRpYXRpbmcgZm9vZCBjYW4gYWN0dWFsbHkgaGVscCByZWR1Y2UgZm9vZCB3YXN0ZS4gQnkga2lsbGluZyBiYWN0ZXJpYSBhbmQgb3RoZXIgcGF0aG9nZW5zLCBpcnJhZGlhdGlvbiBjYW4gZXh0ZW5kIHRoZSBzaGVsZiBsaWZlIG9mIGZvb2QsIHdoaWNoIG1lYW5zIGxlc3MgZm9vZCBpcyB3YXN0ZWQuXFxuXFxuKGYpIENoZW1pY2FsIGNoYW5nZXM6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgaXJyYWRpYXRpbmcgZm9vZCBjYW4gY2F1c2Ugc29tZSBjaGVtaWNhbCBjaGFuZ2VzIGluIHRoZSBmb29kLCBidXQgdGhlc2UgY2hhbmdlcyBhcmUgbm90IGhhcm1mdWwgdG8gaHVtYW4gaGVhbHRoLiBJbiBmYWN0LCB0aGUgV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiwgdGhlIFUuUy4gRm9vZCBhbmQgRHJ1ZyBBZG1pbmlzdHJhdGlvbiwgYW5kIG90aGVyIG9yZ2FuaXphdGlvbnMgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgaXJyYWRpYXRlZCBmb29kIGlzIHNhZmUgdG8gZWF0LlxcblxcbihnKSBHZXQgY2hlbWljYWwgcmVhY3Rpb25zIHN0YXJ0ZWQ6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgaXJyYWRpYXRpbmcgZm9vZCBkb2VzIG5vdCBnZXQgY2hlbWljYWwgcmVhY3Rpb25zIHN0YXJ0ZWQuIEl0IGlzIGEgcHJvY2VzcyBvZiBleHBvc2luZyBmb29kIHRvIGlvbml6aW5nIHJhZGlhdGlvbiB0byBraWxsIGJhY3RlcmlhLCB2aXJ1c2VzLCBhbmQgb3RoZXIgcGF0aG9nZW5zIHRoYXQgbWF5IGJlIHByZXNlbnQgaW4gdGhlIGZvb2QuXFxuXFxuKGgpIE1ham9yIHRocmVhdCB0byBoZWFsdGg6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgaXJyYWRpYXRlZCBmb29kIGlzIG5vdCBhIG1ham9yIHRocmVhdCB0byBoZWFsdGguIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiwgdGhlIFUuUy4gRm9vZCBhbmQgRHJ1ZyBBZG1pbmlzdHJhdGlvbiwgYW5kIG90aGVyIG9yZ2FuaXphdGlvbnMgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgaXJyYWRpYXRlZCBmb29kIGlzIHNhZmUgdG8gZWF0LiBJbiBmYWN0LCBpcnJhZGlhdGlvbiBjYW4gaGVscCByZWR1Y2UgdGhlIHJpc2sgb2YgZm9vZGJvcm5lIGlsbG5lc3MgYnkga2lsbGluZyBiYWN0ZXJpYSBhbmQgb3RoZXIgcGF0aG9nZW5zIHRoYXQgbWF5IGJlIHByZXNlbnQgaW4gdGhlIGZvb2QuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjIiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IHByb3RlY3RzIGEgbWFtbWFsJ3Mgc2tpbj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgRmliZXIgZm9sbGljbGVzIChiKSBFeGZvbGlhdGlvbiAoYykgUmVzaXN0YW5jZSAoZCkgTGF5ZXJzIG9mIGZhdCAoZSkgRXZhcG9yYXRpb24gKGYpIEEgY3V0aWNsZSAoZykgU2Vuc29yeSBuZXVyb25zIChoKSBGdXIgYW5kIGZhdCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiYikgRXhmb2xpYXRpb246IEV4Zm9saWF0aW9uIGlzIHRoZSBwcm9jZXNzIG9mIHNoZWRkaW5nIGRlYWQgc2tpbiBjZWxscyBmcm9tIHRoZSBzdXJmYWNlIG9mIHRoZSBza2luLiBXaGlsZSB0aGlzIGlzIGFuIGltcG9ydGFudCBwcm9jZXNzIGZvciBtYWludGFpbmluZyBoZWFsdGh5IHNraW4sIGl0IGRvZXMgbm90IHByb3RlY3QgdGhlIHNraW4uXFxuXFxuYykgUmVzaXN0YW5jZTogUmVzaXN0YW5jZSBpcyBhIHZhZ3VlIHRlcm0gYW5kIGRvZXMgbm90IHByb3ZpZGUgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgcHJvdGVjdHMgdGhlIHNraW4uXFxuXFxuZCkgTGF5ZXJzIG9mIGZhdDogV2hpbGUgbGF5ZXJzIG9mIGZhdCBjYW4gcHJvdmlkZSBpbnN1bGF0aW9uIGFuZCBjdXNoaW9uaW5nIGZvciB0aGUgc2tpbiwgdGhleSBkbyBub3QgZGlyZWN0bHkgcHJvdGVjdCB0aGUgc2tpbi5cXG5cXG5lKSBFdmFwb3JhdGlvbjogRXZhcG9yYXRpb24gaXMgYSBwcm9jZXNzIGJ5IHdoaWNoIGEgbGlxdWlkIHR1cm5zIGludG8gYSBnYXMuIEl0IGRvZXMgbm90IHByb3RlY3QgdGhlIHNraW4uXFxuXFxuZikgQSBjdXRpY2xlOiBBIGN1dGljbGUgaXMgYSBwcm90ZWN0aXZlIGxheWVyIHRoYXQgY292ZXJzIHRoZSBzdXJmYWNlIG9mIHNvbWUgb3JnYW5pc21zLCBzdWNoIGFzIHBsYW50cyBhbmQgaW5zZWN0cy4gSG93ZXZlciwgbWFtbWFscyBkbyBub3QgaGF2ZSBhIGN1dGljbGUuXFxuXFxuZykgU2Vuc29yeSBuZXVyb25zOiBTZW5zb3J5IG5ldXJvbnMgYXJlIG5lcnZlIGNlbGxzIHRoYXQgdHJhbnNtaXQgc2Vuc29yeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBib2R5IHRvIHRoZSBicmFpbi4gV2hpbGUgdGhleSBwbGF5IGFuIGltcG9ydGFudCByb2xlIGluIHRoZSBuZXJ2b3VzIHN5c3RlbSwgdGhleSBkbyBub3QgcHJvdGVjdCB0aGUgc2tpbi5cXG5cXG5oKSBGdXIgYW5kIGZhdDogVGhpcyBpcyBhIGNvcnJlY3QgYW5zd2VyLiBGdXIgYW5kIGZhdCBwcm92aWRlIGluc3VsYXRpb24gYW5kIHByb3RlY3Rpb24gZm9yIHRoZSBza2luLiBIb3dldmVyLCB0aGUgcXVlc3Rpb24gc3BlY2lmaWNhbGx5IGFza3Mgd2hhdCBwcm90ZWN0cyB0aGUgc2tpbiwgYW5kIGZpYmVyIGZvbGxpY2xlcyBhcmUgdGhlIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBza2luIHRoYXQgcHJvdmlkZSB0aGUgbW9zdCBkaXJlY3QgcHJvdGVjdGlvbi5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJhXCJ9In1dLCAiMyI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZG8gZWFydGh3b3JtcyBkbyB3aGVuIGEgc2VnbWVudCBicmVha3Mgb2ZmP1xuQW5zd2VyIENob2ljZXM6IChhKSBEaWVzIChiKSBSZWdyb3dzIGl0IChjKSBSZXByb2R1Y2VzIChkKSBTZWRpbWVudCAoZSkgUm9vdCBncm93dGggKGYpIE1pZ3JhdGUgKGcpIFN0b3BzIGdyb3dpbmcgKGgpIFJvb3RzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJhKSBEaWVzOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGVhcnRod29ybXMgZG8gbm90IGRpZSB3aGVuIGEgc2VnbWVudCBicmVha3Mgb2ZmLiBXaGlsZSBpdCBtYXkgYmUgYSB0cmF1bWF0aWMgZXhwZXJpZW5jZSBmb3IgdGhlIGVhcnRod29ybSwgdGhleSBhcmUgYWJsZSB0byByZWdlbmVyYXRlIHRoZSBsb3N0IHNlZ21lbnQuXFxuXFxuYykgUmVwcm9kdWNlczogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBlYXJ0aHdvcm1zIGRvIG5vdCByZXByb2R1Y2Ugd2hlbiBhIHNlZ21lbnQgYnJlYWtzIG9mZi4gUmVwcm9kdWN0aW9uIGluIGVhcnRod29ybXMgaW52b2x2ZXMgdGhlIGV4Y2hhbmdlIG9mIHNwZXJtIGJldHdlZW4gdHdvIGluZGl2aWR1YWxzLCBhbmQgZG9lcyBub3QgaW52b2x2ZSB0aGUgbG9zcyBvZiBzZWdtZW50cy5cXG5cXG5kKSBTZWRpbWVudDogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgcXVlc3Rpb24uIFNlZGltZW50IHJlZmVycyB0byB0aGUgbWF0ZXJpYWwgdGhhdCBzZXR0bGVzIGF0IHRoZSBib3R0b20gb2YgYSBib2R5IG9mIHdhdGVyIG9yIG90aGVyIGxpcXVpZC5cXG5cXG5lKSBSb290IGdyb3d0aDogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgcXVlc3Rpb24uIFJvb3QgZ3Jvd3RoIHJlZmVycyB0byB0aGUgZ3Jvd3RoIG9mIHJvb3RzIGluIHBsYW50cywgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZWFydGh3b3Jtcy5cXG5cXG5mKSBNaWdyYXRlOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSBxdWVzdGlvbi4gTWlncmF0aW9uIHJlZmVycyB0byB0aGUgbW92ZW1lbnQgb2YgYW5pbWFscyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBlYXJ0aHdvcm1zIHJlZ2VuZXJhdGluZyBsb3N0IHNlZ21lbnRzLlxcblxcbmcpIFN0b3BzIGdyb3dpbmc6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgZWFydGh3b3JtcyBkbyBub3Qgc3RvcCBncm93aW5nIHdoZW4gYSBzZWdtZW50IGJyZWFrcyBvZmYuIFdoaWxlIHRoZSBsb3N0IHNlZ21lbnQgbWF5IHRha2Ugc29tZSB0aW1lIHRvIHJlZ2VuZXJhdGUsIHRoZSBlYXJ0aHdvcm0gd2lsbCBjb250aW51ZSB0byBncm93IGFuZCBtb3ZlLlxcblxcbmgpIFJvb3RzOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSBxdWVzdGlvbi4gUm9vdHMgcmVmZXIgdG8gdGhlIHBhcnQgb2YgYSBwbGFudCB0aGF0IHR5cGljYWxseSBsaWVzIGJlbG93IHRoZSBzdXJmYWNlIG9mIHRoZSBzb2lsLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBlYXJ0aHdvcm1zIHJlZ2VuZXJhdGluZyBsb3N0IHNlZ21lbnRzLlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImJcIn0ifV0sICI0IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogTGlnaHRuaW5nIGNhbiBiZSBiYWQgZm9yIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFRoZSBlbnZpcm9ubWVudCAoYikgUmFpbnN0b3JtcyAoYykgRGVzdHJ1Y3Rpb24gKGQpIFZpc2liaWxpdHkgKGUpIFRodW5kZXIgKGYpIFRoZSBzdW4gKGcpIFRoZSB3ZWF0aGVyLiAoaCkgVHJhbnNwb3J0YXRpb24ifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcImIpIFJhaW5zdG9ybXM6IExpZ2h0bmluZyBpcyBhY3R1YWxseSBhIG5hdHVyYWwgcGhlbm9tZW5vbiB0aGF0IG9jY3VycyBkdXJpbmcgcmFpbnN0b3Jtcy4gSXQgaXMgbm90IGJhZCBmb3IgcmFpbnN0b3JtcywgYnV0IHJhdGhlciBhIHBhcnQgb2YgdGhlIHN0b3JtLlxcblxcbmMpIERlc3RydWN0aW9uOiBXaGlsZSBsaWdodG5pbmcgY2FuIGNhdXNlIGRlc3RydWN0aW9uLCB0aGUgcXVlc3Rpb24gaXMgYXNraW5nIHdoYXQgbGlnaHRuaW5nIGNhbiBiZSBiYWQgZm9yLCBub3Qgd2hhdCBpdCBjYW4gY2F1c2UuXFxuXFxuZCkgVmlzaWJpbGl0eTogTGlnaHRuaW5nIGNhbiBhY3R1YWxseSBpbXByb3ZlIHZpc2liaWxpdHkgZHVyaW5nIGEgc3Rvcm0gYnkgaWxsdW1pbmF0aW5nIHRoZSBzdXJyb3VuZGluZ3MuIEl0IGlzIG5vdCBiYWQgZm9yIHZpc2liaWxpdHkuXFxuXFxuZSkgVGh1bmRlcjogVGh1bmRlciBpcyBhY3R1YWxseSBjYXVzZWQgYnkgbGlnaHRuaW5nLCBzbyBpdCBpcyBub3QgYmFkIGZvciB0aHVuZGVyLlxcblxcbmYpIFRoZSBzdW46IExpZ2h0bmluZyBpcyBub3QgcmVsYXRlZCB0byB0aGUgc3VuLCBzbyBpdCBpcyBub3QgYmFkIGZvciB0aGUgc3VuLlxcblxcbmcpIFRoZSB3ZWF0aGVyOiBMaWdodG5pbmcgaXMgYSBwYXJ0IG9mIHRoZSB3ZWF0aGVyLCBzbyBpdCBpcyBub3QgYmFkIGZvciB0aGUgd2VhdGhlci5cXG5cXG5oKSBUcmFuc3BvcnRhdGlvbjogTGlnaHRuaW5nIGNhbiBiZSBkYW5nZXJvdXMgZm9yIHRyYW5zcG9ydGF0aW9uLCBidXQgdGhlIHF1ZXN0aW9uIGlzIGFza2luZyB3aGF0IGxpZ2h0bmluZyBjYW4gYmUgYmFkIGZvciBpbiBnZW5lcmFsLCBub3Qgc3BlY2lmaWNhbGx5IGZvciB0cmFuc3BvcnRhdGlvbi5cXG5cXG5UaGVyZWZvcmUsIHRoZSBvbmx5IGxvZ2ljYWwgYW5zd2VyIGlzIGEpIHRoZSBlbnZpcm9ubWVudC4gTGlnaHRuaW5nIGNhbiBzdGFydCB3aWxkZmlyZXMsIGRhbWFnZSB0cmVlcyBhbmQgb3RoZXIgdmVnZXRhdGlvbiwgYW5kIGNhdXNlIHNvaWwgZXJvc2lvbiwgd2hpY2ggY2FuIGFsbCBoYXZlIG5lZ2F0aXZlIGltcGFjdHMgb24gdGhlIGVudmlyb25tZW50LlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICI1IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogRXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbiBzaG93IHRoYXQgd2hhdCB1c2VkIHRvIGxpdmUgaW4gYSBwbGFjZT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU291bHMgKGIpIEFuaW1hbHMgd2l0aCBiYWNrYm9uZXMgKGMpIE9yZ2FuaXNtcyAoZCkgUGxhbnQgb3IgYW5pbWFsIChlKSBNYWxlcyBhbmQgZmVtYWxlcyAoZikgRGVmb3Jlc3RhdGlvbiAoZykgUmVpbmNhcm5hdGlvbiAoaCkgSW1wb3J0YW50IGhhYml0YXRzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJhKSBTb3VsczogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBzb3VscyBhcmUgbm90IHBoeXNpY2FsIGVudGl0aWVzIHRoYXQgY2FuIGxlYXZlIGV2aWRlbmNlIG9mIHRoZWlyIHByZXNlbmNlIGluIGEgcGxhY2UuIFNvdWxzIGFyZSBiZWxpZXZlZCB0byBiZSBzcGlyaXR1YWwgZW50aXRpZXMgdGhhdCBhcmUgbm90IGJvdW5kIGJ5IHBoeXNpY2FsIGxhd3MuXFxuXFxuYikgQW5pbWFscyB3aXRoIGJhY2tib25lczogVGhpcyBvcHRpb24gaXMgbm90IGNvbXBsZXRlbHkgY29ycmVjdCBiZWNhdXNlIG5vdCBhbGwgYW5pbWFscyBoYXZlIGJhY2tib25lcy4gSW52ZXJ0ZWJyYXRlcywgc3VjaCBhcyBpbnNlY3RzIGFuZCBtb2xsdXNrcywgZG8gbm90IGhhdmUgYmFja2JvbmVzLiBUaGVyZWZvcmUsIGV2aWRlbmNlIG9mIHBhc3QgbGlmZSBjYW5ub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYW5pbWFscyB3aXRoIGJhY2tib25lcyBsaXZlZCBpbiBhIHBsYWNlLlxcblxcbmMpIE9yZ2FuaXNtczogVGhpcyBvcHRpb24gaXMgdG9vIGJyb2FkIGFuZCBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbi4gRXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbiBzaG93IHRoYXQgYW55IHR5cGUgb2Ygb3JnYW5pc20gb25jZSBsaXZlZCBpbiBhIHBsYWNlLCBpbmNsdWRpbmcgYmFjdGVyaWEsIGZ1bmdpLCBhbmQgcHJvdGlzdHMuXFxuXFxuZCkgUGxhbnQgb3IgYW5pbWFsOiBUaGlzIGlzIHRoZSBjb3JyZWN0IGFuc3dlciBiZWNhdXNlIGV2aWRlbmNlIG9mIHBhc3QgbGlmZSBjYW4gc2hvdyB0aGF0IGEgcGxhbnQgb3IgYW5pbWFsIG9uY2UgbGl2ZWQgaW4gYSBwbGFjZS4gRm9zc2lscywgZm9yIGV4YW1wbGUsIHByb3ZpZGUgZXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGFuZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiBwbGFudHMgYW5kIGFuaW1hbHMgbGl2ZWQgaW4gYSBwYXJ0aWN1bGFyIGFyZWEuXFxuXFxuZSkgTWFsZXMgYW5kIGZlbWFsZXM6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgZXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbm5vdCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc2V4IG9mIHRoZSBvcmdhbmlzbXMgdGhhdCBvbmNlIGxpdmVkIGluIGEgcGxhY2UuIEZvc3NpbHMgZG8gbm90IHR5cGljYWxseSBwcmVzZXJ2ZSBzZXh1YWwgY2hhcmFjdGVyaXN0aWNzLlxcblxcbmYpIERlZm9yZXN0YXRpb246IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgZGVmb3Jlc3RhdGlvbiBpcyBhIGh1bWFuIGFjdGl2aXR5IHRoYXQgZG9lcyBub3QgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgcGFzdCBsaWZlIGluIGEgcGxhY2UuXFxuXFxuZykgUmVpbmNhcm5hdGlvbjogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSByZWluY2FybmF0aW9uIGlzIGEgcmVsaWdpb3VzIG9yIHBoaWxvc29waGljYWwgY29uY2VwdCB0aGF0IGRvZXMgbm90IHByb3ZpZGUgYW55IHNjaWVudGlmaWMgZXZpZGVuY2UgYWJvdXQgcGFzdCBsaWZlIGluIGEgcGxhY2UuXFxuXFxuaCkgSW1wb3J0YW50IGhhYml0YXRzOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGV2aWRlbmNlIG9mIHBhc3QgbGlmZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGltcG9ydGFudCBoYWJpdGF0cy4gV2hpbGUgY2VydGFpbiBhcmVhcyBtYXkgaGF2ZSBiZWVuIGltcG9ydGFudCBoYWJpdGF0cyBpbiB0aGUgcGFzdCwgZXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbiBhbHNvIGJlIGZvdW5kIGluIGFyZWFzIHRoYXQgd2VyZSBub3QgaW1wb3J0YW50IGhhYml0YXRzLlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImRcIn0ifV0sICI2IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogSG93IHRyYWl0cyBhcmUgcGFzc2VkIGRvd24sIG9yIGluaGVyaXRlZCwgaXMgZm91bmQgaW4gaW5mb3JtYXRpb24gaW4gYW4gb3JnYW5pc20ncyB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBTcGVjaWVzIChiKSBNZXNzZW5nZXJzIChjKSBIYWlyIGZvbGxpY2xlcyAoZCkgQ3ljbGVzIChlKSBTa2luIGNlbGxzIChmKSBFbmRvY3JpbmUgc3lzdGVtIChnKSBDaHJvbW9zb21lcyAoaCkgUHJvdGVpbnMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcIihhKSBTcGVjaWVzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBzcGVjaWVzIHJlZmVyIHRvIGEgZ3JvdXAgb2Ygb3JnYW5pc21zIHRoYXQgc2hhcmUgc2ltaWxhciBjaGFyYWN0ZXJpc3RpY3MgYW5kIGNhbiBpbnRlcmJyZWVkIHRvIHByb2R1Y2UgZmVydGlsZSBvZmZzcHJpbmcuIEl0IGRvZXMgbm90IHByb3ZpZGUgaW5mb3JtYXRpb24gb24gaG93IHRyYWl0cyBhcmUgcGFzc2VkIGRvd24uXFxuXFxuKGIpIE1lc3NlbmdlcnM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIG1lc3NlbmdlcnMgcmVmZXIgdG8gbW9sZWN1bGVzIHN1Y2ggYXMgaG9ybW9uZXMgYW5kIG5ldXJvdHJhbnNtaXR0ZXJzIHRoYXQgdHJhbnNtaXQgc2lnbmFscyBiZXR3ZWVuIGNlbGxzLiBXaGlsZSB0aGV5IHBsYXkgYSByb2xlIGluIHZhcmlvdXMgYmlvbG9naWNhbCBwcm9jZXNzZXMsIHRoZXkgZG8gbm90IHByb3ZpZGUgaW5mb3JtYXRpb24gb24gaG93IHRyYWl0cyBhcmUgcGFzc2VkIGRvd24uXFxuXFxuKGMpIEhhaXIgZm9sbGljbGVzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBoYWlyIGZvbGxpY2xlcyBhcmUgc3RydWN0dXJlcyBpbiB0aGUgc2tpbiB0aGF0IHByb2R1Y2UgaGFpci4gVGhleSBkbyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cXG5cXG4oZCkgQ3ljbGVzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBjeWNsZXMgcmVmZXIgdG8gcmVjdXJyaW5nIGV2ZW50cyBvciBwcm9jZXNzZXMgc3VjaCBhcyB0aGUgbWVuc3RydWFsIGN5Y2xlIG9yIHRoZSB3YXRlciBjeWNsZS4gVGhleSBkbyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cXG5cXG4oZSkgU2tpbiBjZWxsczogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2Ugc2tpbiBjZWxscyBhcmUgY2VsbHMgdGhhdCBtYWtlIHVwIHRoZSBvdXRlciBsYXllciBvZiB0aGUgc2tpbi4gVGhleSBkbyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cXG5cXG4oZikgRW5kb2NyaW5lIHN5c3RlbTogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgdGhlIGVuZG9jcmluZSBzeXN0ZW0gaXMgYSBzeXN0ZW0gb2YgZ2xhbmRzIHRoYXQgcHJvZHVjZSBhbmQgc2VjcmV0ZSBob3Jtb25lcy4gV2hpbGUgaG9ybW9uZXMgcGxheSBhIHJvbGUgaW4gdmFyaW91cyBiaW9sb2dpY2FsIHByb2Nlc3NlcywgdGhleSBkbyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cXG5cXG4oZykgQ2hyb21vc29tZXM6IFRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyLiBDaHJvbW9zb21lcyBhcmUgc3RydWN0dXJlcyBpbiB0aGUgbnVjbGV1cyBvZiBhIGNlbGwgdGhhdCBjb250YWluIGdlbmV0aWMgaW5mb3JtYXRpb24gaW4gdGhlIGZvcm0gb2YgRE5BLiBUcmFpdHMgYXJlIHBhc3NlZCBkb3duIGZyb20gb25lIGdlbmVyYXRpb24gdG8gdGhlIG5leHQgdGhyb3VnaCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGFuIG9yZ2FuaXNtJ3MgY2hyb21vc29tZXMuXFxuXFxuKGgpIFByb3RlaW5zOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBwcm90ZWlucyBhcmUgbW9sZWN1bGVzIG1hZGUgdXAgb2YgYW1pbm8gYWNpZHMgdGhhdCBwZXJmb3JtIHZhcmlvdXMgZnVuY3Rpb25zIGluIHRoZSBib2R5LiBXaGlsZSB0aGV5IHBsYXkgYSByb2xlIGluIHZhcmlvdXMgYmlvbG9naWNhbCBwcm9jZXNzZXMsIHRoZXkgZG8gbm90IHByb3ZpZGUgaW5mb3JtYXRpb24gb24gaG93IHRyYWl0cyBhcmUgcGFzc2VkIGRvd24uXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZ1wifSJ9XSwgIjciOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbWFqb3IgcHJvZHVjZXJzIGluIHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uP1xuQW5zd2VyIENob2ljZXM6IChhKSBHcmFzcyAoYikgQW5pbWFscyAoYykgQXBwbGVzIChkKSBQb3RhdG9lcyAoZSkgVHJlZXMgKGYpIFBsYW50cyAoZykgRnVuZ2kgKGgpIEZpZWxkcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiKGEpIEdyYXNzOiBXaGlsZSBncmFzcyBpcyBhIHR5cGUgb2YgcGxhbnQsIGl0IGlzIG5vdCB0aGUgb25seSB0eXBlIG9mIHBsYW50LiBBZGRpdGlvbmFsbHksIHRoZSBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgYXNrcyBhYm91dCAnbWFqb3IgcHJvZHVjZXJzIGluIHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uLCcgYW5kIGdyYXNzIGlzIG5vdCBuZWNlc3NhcmlseSBhIG1ham9yIHByb2R1Y2VyIGluIHRoZXNlIGFyZWFzLlxcblxcbihiKSBBbmltYWxzOiBBbmltYWxzIGFyZSBub3QgcHJvZHVjZXJzLCB0aGV5IGFyZSBjb25zdW1lcnMuIFRoZXkgZG8gbm90IHByb2R1Y2UgZW5lcmd5IGZyb20gc3VubGlnaHQsIHdhdGVyLCBhbmQgY2FyYm9uIGRpb3hpZGUgbGlrZSBwbGFudHMgZG8uXFxuXFxuKGMpIEFwcGxlczogQXBwbGVzIGFyZSBhIHR5cGUgb2YgZnJ1aXQgdGhhdCBncm93IG9uIHRyZWVzLCBidXQgdGhleSBhcmUgbm90IHByb2R1Y2VycyBpbiBhbmQgb2YgdGhlbXNlbHZlcy4gVGhlIHRyZWVzIHRoYXQgcHJvZHVjZSBhcHBsZXMgYXJlIHRoZSBwcm9kdWNlcnMuXFxuXFxuKGQpIFBvdGF0b2VzOiBQb3RhdG9lcyBhcmUgYSB0eXBlIG9mIHZlZ2V0YWJsZSB0aGF0IGdyb3cgdW5kZXJncm91bmQsIGJ1dCB0aGV5IGFyZSBub3QgcHJvZHVjZXJzIGluIGFuZCBvZiB0aGVtc2VsdmVzLiBUaGUgcGxhbnRzIHRoYXQgcHJvZHVjZSBwb3RhdG9lcyBhcmUgdGhlIHByb2R1Y2Vycy5cXG5cXG4oZSkgVHJlZXM6IFRyZWVzIGFyZSBhIHR5cGUgb2YgcGxhbnQgYW5kIGFyZSBpbmRlZWQgbWFqb3IgcHJvZHVjZXJzIGluIHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uLiBUaGV5IGFic29yYiBjYXJib24gZGlveGlkZSBhbmQgcmVsZWFzZSBveHlnZW4sIGFuZCB0aGV5IGFsc28gaGVscCByZWd1bGF0ZSB0aGUgdGVtcGVyYXR1cmUgYW5kIG1vaXN0dXJlIGxldmVscyBpbiB0aGVpciBlbnZpcm9ubWVudC5cXG5cXG4oZykgRnVuZ2k6IEZ1bmdpIGFyZSBub3QgcHJvZHVjZXJzLCB0aGV5IGFyZSBkZWNvbXBvc2Vycy4gVGhleSBicmVhayBkb3duIGRlYWQgb3JnYW5pYyBtYXR0ZXIgYW5kIHJlY3ljbGUgbnV0cmllbnRzIGJhY2sgaW50byB0aGUgZWNvc3lzdGVtLlxcblxcbihoKSBGaWVsZHM6IEZpZWxkcyBhcmUgbm90IGxpdmluZyBvcmdhbmlzbXMgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgcHJvZHVjZXJzLiBUaGV5IGFyZSBzaW1wbHkgYXJlYXMgb2YgbGFuZCB1c2VkIGZvciBncm93aW5nIGNyb3BzIG9yIHJhaXNpbmcgbGl2ZXN0b2NrLlxcblxcbkluIHN1bW1hcnksIHRoZSBjb3JyZWN0IGFuc3dlciBpcyAoZikgcGxhbnRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCB1c2UgcGhvdG9zeW50aGVzaXMgdG8gcHJvZHVjZSBlbmVyZ3kgZnJvbSBzdW5saWdodCwgd2F0ZXIsIGFuZCBjYXJib24gZGlveGlkZS5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJmXCJ9In1dLCAiOCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZG9lcyBiZWluZyBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGNoYW5nZSB2ZWdldGF0aW9uIGludG8/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNjYXJjZSByZXNvdXJjZXMgKGIpIEhhcm1mdWwgc3Vic3RhbmNlcyAoYykgU2NhcnMgKGQpIEZvc3NpbCBmdWVscyAoZSkgU2VkaW1lbnQgKGYpIFNvbWV0aGluZyB0byBtb3ZlIChnKSBNYWdpYyAoaCkgUGljbmljcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiKGEpIFNjYXJjZSByZXNvdXJjZXM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgdHVybiB2ZWdldGF0aW9uIGludG8gc2NhcmNlIHJlc291cmNlcy4gU2NhcmNlIHJlc291cmNlcyBhcmUgcmVzb3VyY2VzIHRoYXQgYXJlIGxpbWl0ZWQgaW4gYXZhaWxhYmlsaXR5LCBhbmQgdmVnZXRhdGlvbiBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IGJlY29tZSBhIGxpbWl0ZWQgcmVzb3VyY2UuXFxuXFxuKGIpIEhhcm1mdWwgc3Vic3RhbmNlczogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCB0dXJuIHZlZ2V0YXRpb24gaW50byBoYXJtZnVsIHN1YnN0YW5jZXMuIEhhcm1mdWwgc3Vic3RhbmNlcyBhcmUgc3Vic3RhbmNlcyB0aGF0IGNhbiBjYXVzZSBoYXJtIG9yIGRhbWFnZSwgYW5kIHZlZ2V0YXRpb24gYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCBiZWNvbWUgaGFybWZ1bC5cXG5cXG4oYykgU2NhcnM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgdHVybiB2ZWdldGF0aW9uIGludG8gc2NhcnMuIFNjYXJzIGFyZSBtYXJrcyBsZWZ0IG9uIHRoZSBza2luIG9yIG90aGVyIHRpc3N1ZSBhZnRlciBhIHdvdW5kIGhhcyBoZWFsZWQsIGFuZCB2ZWdldGF0aW9uIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgYmVjb21lIGEgd291bmQuXFxuXFxuKGUpIFNlZGltZW50OiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBiZWluZyBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IHR1cm4gdmVnZXRhdGlvbiBpbnRvIHNlZGltZW50LiBTZWRpbWVudCBpcyBhIG5hdHVyYWxseSBvY2N1cnJpbmcgbWF0ZXJpYWwgdGhhdCBpcyBicm9rZW4gZG93biBieSB3ZWF0aGVyaW5nIGFuZCBlcm9zaW9uLCBhbmQgdmVnZXRhdGlvbiBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IGJlY29tZSBzZWRpbWVudC5cXG5cXG4oZikgU29tZXRoaW5nIHRvIG1vdmU6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgdHVybiB2ZWdldGF0aW9uIGludG8gc29tZXRoaW5nIHRvIG1vdmUuIFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9wdGlvbnMuXFxuXFxuKGcpIE1hZ2ljOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBiZWluZyBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IHR1cm4gdmVnZXRhdGlvbiBpbnRvIG1hZ2ljLiBNYWdpYyBpcyBhIHN1cGVybmF0dXJhbCBmb3JjZSB0aGF0IGlzIG5vdCBiYXNlZCBvbiBzY2llbmNlIG9yIHJlYXNvbiwgYW5kIHZlZ2V0YXRpb24gYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCBiZWNvbWUgc3VwZXJuYXR1cmFsLlxcblxcbihoKSBQaWNuaWNzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBiZWluZyBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IHR1cm4gdmVnZXRhdGlvbiBpbnRvIHBpY25pY3MuIFBpY25pY3MgYXJlIG91dGRvb3IgbWVhbHMgb3Igc29jaWFsIGdhdGhlcmluZ3MsIGFuZCB2ZWdldGF0aW9uIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgYmVjb21lIGEgc29jaWFsIGdhdGhlcmluZy5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJkXCJ9In1dLCAiOSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoZW4gd2lsbCBhbmltYWxzIG1vdmUgdG8gYW5vdGhlciBhcmVhP1xuQW5zd2VyIENob2ljZXM6IChhKSBUbyBrZWVwIHRoZWlyIGJvZHkgaGVhdC4gKGIpIFJldXNpbmcgbWF0ZXJpYWxzIChjKSBJZiB0aGV5IGNhbiBubyBsb25nZXIgZ2V0IGZvb2QgKGQpIElmIHRoZXkgYXJlIGJvcmVkIChlKSBNYXJzaGVzIGFuZCBzd2FtcHMgKGYpIElmIHRoZXkgaGF2ZSB0b28gbXVjaCBtb25leSAoZykgV2FybSBhaXIgbW92aW5nIGludG8gY29sZCBhaXIgKGgpIElmIHRoZXkgaGF2ZSB0b28gbXVjaCBmb29kIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJhKSBBbmltYWxzIGRvIG5vdCBtb3ZlIHRvIGFub3RoZXIgYXJlYSB0byBrZWVwIHRoZWlyIGJvZHkgaGVhdC4gQW5pbWFscyBoYXZlIGRpZmZlcmVudCB3YXlzIG9mIHJlZ3VsYXRpbmcgdGhlaXIgYm9keSB0ZW1wZXJhdHVyZSwgc3VjaCBhcyBzd2VhdGluZywgcGFudGluZywgb3IgaGliZXJuYXRpb24uIEhvd2V2ZXIsIGlmIHRoZSBlbnZpcm9ubWVudCBiZWNvbWVzIHRvbyBleHRyZW1lLCBhbmltYWxzIG1heSBtb3ZlIHRvIGEgbW9yZSBzdWl0YWJsZSBhcmVhLlxcblxcbmIpIEFuaW1hbHMgZG8gbm90IG1vdmUgdG8gYW5vdGhlciBhcmVhIHRvIHJldXNlIG1hdGVyaWFscy4gVGhpcyBvcHRpb24gaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHF1ZXN0aW9uIGFuZCBkb2VzIG5vdCBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGFuaW1hbCBtb3ZlbWVudC5cXG5cXG5kKSBBbmltYWxzIGRvIG5vdCBtb3ZlIHRvIGFub3RoZXIgYXJlYSBpZiB0aGV5IGFyZSBib3JlZC4gQm9yZWRvbSBpcyBhIGh1bWFuIGVtb3Rpb24gYW5kIGFuaW1hbHMgZG8gbm90IGhhdmUgdGhlIHNhbWUgY2FwYWNpdHkgZm9yIGJvcmVkb20gYXMgaHVtYW5zIGRvLiBBbmltYWxzIG1vdmUgZm9yIHN1cnZpdmFsIHJlYXNvbnMgc3VjaCBhcyBmaW5kaW5nIGZvb2QsIHdhdGVyLCBvciBzaGVsdGVyLlxcblxcbmUpIE1hcnNoZXMgYW5kIHN3YW1wcyBhcmUgbm90IGEgcmVhc29uIGZvciBhbmltYWwgbW92ZW1lbnQuIE1hcnNoZXMgYW5kIHN3YW1wcyBhcmUgdHlwZXMgb2YgaGFiaXRhdHMgd2hlcmUgYW5pbWFscyBtYXkgbGl2ZSwgYnV0IHRoZXkgZG8gbm90IGNhdXNlIGFuaW1hbHMgdG8gbW92ZSB0byBhbm90aGVyIGFyZWEuXFxuXFxuZikgQW5pbWFscyBkbyBub3QgbW92ZSB0byBhbm90aGVyIGFyZWEgaWYgdGhleSBoYXZlIHRvbyBtdWNoIG1vbmV5LiBUaGlzIG9wdGlvbiBpcyBub3QgcmVsYXRlZCB0byB0aGUgcXVlc3Rpb24gYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgYW5pbWFsIG1vdmVtZW50LlxcblxcbmcpIFdhcm0gYWlyIG1vdmluZyBpbnRvIGNvbGQgYWlyIGlzIGEgd2VhdGhlciBwaGVub21lbm9uIGFuZCBkb2VzIG5vdCBjYXVzZSBhbmltYWxzIHRvIG1vdmUgdG8gYW5vdGhlciBhcmVhLlxcblxcbmgpIEFuaW1hbHMgZG8gbm90IG1vdmUgdG8gYW5vdGhlciBhcmVhIGlmIHRoZXkgaGF2ZSB0b28gbXVjaCBmb29kLiBBbmltYWxzIG1heSBzdG9yZSBmb29kIGZvciBsYXRlciB1c2UsIGJ1dCB0aGV5IGRvIG5vdCBtb3ZlIHRvIGFub3RoZXIgYXJlYSBpZiB0aGV5IGhhdmUgdG9vIG11Y2ggZm9vZC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyBjKSBpZiBhbmltYWxzIGNhbiBubyBsb25nZXIgZ2V0IGZvb2QgdGhleSB3aWxsIG1vdmUgdG8gYW5vdGhlciBhcmVhLiBUaGlzIGlzIGJlY2F1c2UgYW5pbWFscyBuZWVkIGZvb2QgdG8gc3Vydml2ZSwgYW5kIGlmIHRoZXkgY2Fubm90IGZpbmQgZm9vZCBpbiB0aGVpciBjdXJyZW50IGxvY2F0aW9uLCB0aGV5IHdpbGwgbW92ZSB0byBhbm90aGVyIGFyZWEgd2hlcmUgZm9vZCBpcyBhdmFpbGFibGUuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjEwIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogQSBmaXJlY3JhY2tlciBjb252ZXJ0cyBjaGVtaWNhbCBlbmVyZ3kgaW50byB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBLaW5ldGljIGVuZXJneSAoYikgTG91ZCBub2lzZXMgKGMpIFZpYnJhdGluZyB3YXZlcyAoZCkgQW4gb2JqZWN0IGlzIHNlZW4gKGUpIEVsZWN0cm9tYWduZXRpYyBlbmVyZ3kgKGYpIERlb3h5cmlib251Y2xlaWMgYWNpZCAoZykgSHlkcm9nZW4gYW5kIG94eWdlbiAoaCkgSGFybWZ1bCBzdWJzdGFuY2VzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJhKSBLaW5ldGljIGVuZXJneTogS2luZXRpYyBlbmVyZ3kgaXMgdGhlIGVuZXJneSBvZiBtb3Rpb24uIFdoaWxlIGEgZmlyZWNyYWNrZXIgZG9lcyBwcm9kdWNlIHNvbWUgbW90aW9uLCBpdCBpcyBub3QgdGhlIHByaW1hcnkgZm9ybSBvZiBlbmVyZ3kgdGhhdCBpdCBjb252ZXJ0cyBjaGVtaWNhbCBlbmVyZ3kgaW50by4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuYikgTG91ZCBub2lzZXM6IFdoaWxlIGEgZmlyZWNyYWNrZXIgZG9lcyBwcm9kdWNlIGxvdWQgbm9pc2VzLCBpdCBpcyBub3QgdGhlIHByaW1hcnkgZm9ybSBvZiBlbmVyZ3kgdGhhdCBpdCBjb252ZXJ0cyBjaGVtaWNhbCBlbmVyZ3kgaW50by4gVGhlIGxvdWQgbm9pc2VzIGFyZSBhIHJlc3VsdCBvZiB0aGUgdmlicmF0aW5nIHdhdmVzIHByb2R1Y2VkIGJ5IHRoZSBmaXJlY3JhY2tlci4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZCkgQW4gb2JqZWN0IGlzIHNlZW46IEEgZmlyZWNyYWNrZXIgZG9lcyBub3QgY29udmVydCBjaGVtaWNhbCBlbmVyZ3kgaW50byB0aGUgYWJpbGl0eSB0byBzZWUgYW4gb2JqZWN0LiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgb3B0aW9ucy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZSkgRWxlY3Ryb21hZ25ldGljIGVuZXJneTogRWxlY3Ryb21hZ25ldGljIGVuZXJneSBpcyBhIGZvcm0gb2YgZW5lcmd5IHRoYXQgaW5jbHVkZXMgcmFkaW8gd2F2ZXMsIG1pY3Jvd2F2ZXMsIGluZnJhcmVkIHJhZGlhdGlvbiwgdmlzaWJsZSBsaWdodCwgdWx0cmF2aW9sZXQgcmFkaWF0aW9uLCBYLXJheXMsIGFuZCBnYW1tYSByYXlzLiBBIGZpcmVjcmFja2VyIGRvZXMgbm90IGNvbnZlcnQgY2hlbWljYWwgZW5lcmd5IGludG8gZWxlY3Ryb21hZ25ldGljIGVuZXJneS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZikgRGVveHlyaWJvbnVjbGVpYyBhY2lkOiBEZW94eXJpYm9udWNsZWljIGFjaWQgKEROQSkgaXMgYSBtb2xlY3VsZSB0aGF0IGNhcnJpZXMgZ2VuZXRpYyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBkZXZlbG9wbWVudCwgZnVuY3Rpb25pbmcsIGdyb3d0aCwgYW5kIHJlcHJvZHVjdGlvbiBvZiBhbGwgbGl2aW5nIHRoaW5ncy4gQSBmaXJlY3JhY2tlciBkb2VzIG5vdCBjb252ZXJ0IGNoZW1pY2FsIGVuZXJneSBpbnRvIEROQS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZykgSHlkcm9nZW4gYW5kIG94eWdlbjogSHlkcm9nZW4gYW5kIG94eWdlbiBhcmUgZWxlbWVudHMgdGhhdCBjYW4gY29tYmluZSB0byBmb3JtIHdhdGVyLiBBIGZpcmVjcmFja2VyIGRvZXMgbm90IGNvbnZlcnQgY2hlbWljYWwgZW5lcmd5IGludG8gaHlkcm9nZW4gYW5kIG94eWdlbi4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuaCkgSGFybWZ1bCBzdWJzdGFuY2VzOiBBIGZpcmVjcmFja2VyIGRvZXMgcHJvZHVjZSBoYXJtZnVsIHN1YnN0YW5jZXMgc3VjaCBhcyBzbW9rZSBhbmQgY2hlbWljYWxzLCBidXQgaXQgaXMgbm90IHRoZSBwcmltYXJ5IGZvcm0gb2YgZW5lcmd5IHRoYXQgaXQgY29udmVydHMgY2hlbWljYWwgZW5lcmd5IGludG8uIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmMpIFZpYnJhdGluZyB3YXZlczogQSBmaXJlY3JhY2tlciBjb252ZXJ0cyBjaGVtaWNhbCBlbmVyZ3kgaW50byB2aWJyYXRpbmcgd2F2ZXMuIFdoZW4gdGhlIGNoZW1pY2FscyBpbnNpZGUgYSBmaXJlY3JhY2tlciByZWFjdCwgdGhleSBwcm9kdWNlIGEgcmFwaWQgcmVsZWFzZSBvZiBlbmVyZ3kgaW4gdGhlIGZvcm0gb2YgaGVhdCBhbmQgZ2FzLiBUaGlzIGVuZXJneSBjYXVzZXMgdGhlIGZpcmVjcmFja2VyIHRvIGV4cGxvZGUsIHByb2R1Y2luZyB2aWJyYXRpbmcgd2F2ZXMgdGhhdCB3ZSBoZWFyIGFzIGxvdWQgbm9pc2VzLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGNvcnJlY3QuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjExIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzP1xuQW5zd2VyIENob2ljZXM6IChhKSBNYWpvciBlZmZlY3RzIChiKSBSZXNwaXJhdGlvbiAoYykgUm9sZXggKGQpIERlbnNpdHkgKGUpIERpcGh0aGVyaWEgKGYpIENhbmlzIGx1cHVzIChnKSBTa2luIGNvbG9yIChoKSBEaWdlc3Rpb24ifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcImEpIE1ham9yIGVmZmVjdHM6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVsYXRlIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcyBvciB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcy4gJ01ham9yIGVmZmVjdHMnIGNvdWxkIHJlZmVyIHRvIGEgdmFyaWV0eSBvZiB0aGluZ3MsIGJ1dCBpdCBpcyBub3Qgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIGEgY29ycmVjdCBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbi5cXG5cXG5iKSBSZXNwaXJhdGlvbjogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBSZXNwaXJhdGlvbiBpcyBhIGJpb2xvZ2ljYWwgcHJvY2VzcyB0aGF0IGludm9sdmVzIHRoZSBleGNoYW5nZSBvZiBnYXNlcywgYnV0IGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcy5cXG5cXG5jKSBSb2xleDogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBSb2xleCBpcyBhIGJyYW5kIG9mIGx1eHVyeSB3YXRjaGVzIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGdlbmV0aWNzLlxcblxcbmQpIERlbnNpdHk6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVsYXRlIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcyBvciB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcy4gRGVuc2l0eSBpcyBhIHBoeXNpY2FsIHByb3BlcnR5IHRoYXQgZGVzY3JpYmVzIHRoZSBhbW91bnQgb2YgbWFzcyBpbiBhIGdpdmVuIHZvbHVtZSwgYnV0IGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcy5cXG5cXG5lKSBEaXBodGhlcmlhOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgdG9waWMgb2YgZ2VuZXRpY3Mgb3IgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuIERpcGh0aGVyaWEgaXMgYSBiYWN0ZXJpYWwgaW5mZWN0aW9uIHRoYXQgY2FuIGNhdXNlIHNldmVyZSByZXNwaXJhdG9yeSBwcm9ibGVtcywgYnV0IGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcy5cXG5cXG5mKSBDYW5pcyBsdXB1czogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBDYW5pcyBsdXB1cyBpcyB0aGUgc2NpZW50aWZpYyBuYW1lIGZvciB0aGUgZ3JheSB3b2xmLCBidXQgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzLlxcblxcbmcpIFNraW4gY29sb3I6IFRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyIGJlY2F1c2Ugc2tpbiBjb2xvciBpcyBhIHRyYWl0IHRoYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcy4gVGhlIGdlbmVzIHRoYXQgY29udHJvbCBza2luIGNvbG9yIHByb2R1Y2UgZGlmZmVyZW50IGFtb3VudHMgb2YgbWVsYW5pbiwgd2hpY2ggaXMgYSBwaWdtZW50IHRoYXQgZ2l2ZXMgc2tpbiBpdHMgY29sb3IuIFRoZSBpbnRlcmFjdGlvbiBvZiB0aGVzZSBnZW5lcyBjYW4gcmVzdWx0IGluIGEgd2lkZSByYW5nZSBvZiBza2luIGNvbG9ycywgZnJvbSB2ZXJ5IGxpZ2h0IHRvIHZlcnkgZGFyay5cXG5cXG5oKSBEaWdlc3Rpb246IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVsYXRlIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcyBvciB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcy4gRGlnZXN0aW9uIGlzIGEgYmlvbG9naWNhbCBwcm9jZXNzIHRoYXQgaW52b2x2ZXMgdGhlIGJyZWFrZG93biBvZiBmb29kIGludG8gc21hbGxlciBtb2xlY3VsZXMsIGJ1dCBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgdG9waWMgb2YgZ2VuZXRpY3MuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZ1wifSJ9XSwgIjEyIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBjYW4gZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWw/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNoZWVwIChiKSBTYWxtb24gKGMpIEdyYXNzZXMgKGQpIEJhdHMgKGUpIEFuaW1hbHMgKGYpIFNocnVicyAoZykgSHVtYW5zIChoKSBUcmVlcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiYikgU2FsbW9uOiBTYWxtb24gYXJlIGEgdHlwZSBvZiBmaXNoIHRoYXQgYXJlIHN0cmljdGx5IGNhcm5pdm9yb3VzIGFuZCBmZWVkIG9uIG90aGVyIG9yZ2FuaXNtcyBzdWNoIGFzIHNtYWxsZXIgZmlzaCwgY3J1c3RhY2VhbnMsIGFuZCBpbnNlY3RzLiBUaGV5IGRvIG5vdCBmZWVkIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbC5cXG5cXG5jKSBHcmFzc2VzOiBHcmFzc2VzIGFyZSBwcmltYXJ5IHByb2R1Y2VycyBhbmQgYXJlIGF0IHRoZSBiYXNlIG9mIHRoZSBmb29kIGNoYWluLiBUaGV5IGFyZSBub3QgY2FwYWJsZSBvZiBmZWVkaW5nIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbC5cXG5cXG5kKSBCYXRzOiBCYXRzIGFyZSBpbnNlY3Rpdm9yZXMgb3IgZnJ1Z2l2b3JlcyBhbmQgZmVlZCBvbiBpbnNlY3RzIG9yIGZydWl0cyByZXNwZWN0aXZlbHkuIFRoZXkgZG8gbm90IGZlZWQgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLlxcblxcbmUpIEFuaW1hbHM6IFRoaXMgb3B0aW9uIGlzIHRvbyBicm9hZCBhbmQgZG9lcyBub3QgcHJvdmlkZSBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24uIEl0IGlzIGluY29ycmVjdCBiZWNhdXNlIG5vdCBhbGwgYW5pbWFscyBjYW4gZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwuXFxuXFxuZikgU2hydWJzOiBTaHJ1YnMgYXJlIGFsc28gcHJpbWFyeSBwcm9kdWNlcnMgYW5kIGFyZSBub3QgY2FwYWJsZSBvZiBmZWVkaW5nIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbC5cXG5cXG5nKSBIdW1hbnM6IEh1bWFucyBhcmUgb21uaXZvcmVzIGFuZCBjYW4gY29uc3VtZSBib3RoIHBsYW50cyBhbmQgYW5pbWFscy4gSG93ZXZlciwgdGhleSBkbyBub3QgZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwgYXMgdGhleSBjb25zdW1lIGVpdGhlciBwbGFudHMgb3IgYW5pbWFscyBhdCBhIHRpbWUuXFxuXFxuaCkgVHJlZXM6IFRyZWVzIGFyZSBhbHNvIHByaW1hcnkgcHJvZHVjZXJzIGFuZCBhcmUgbm90IGNhcGFibGUgb2YgZmVlZGluZyBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgYSkgc2hlZXAsIGFzIHRoZXkgYXJlIGhlcmJpdm9yZXMgYW5kIGNhbiBjb25zdW1lIHBsYW50cyBhdCBvbmUgdHJvcGhpYyBsZXZlbCBhbmQgdGhlbiBiZSBjb25zdW1lZCBieSBhIHByZWRhdG9yIGF0IGEgaGlnaGVyIHRyb3BoaWMgbGV2ZWwuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiYVwifSJ9XSwgIjEzIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hvIGNhbiBzaGl2ZXI/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEJhdHMgKGIpIFNpZGV3YWxrcyAoYykgSHVtYW5zIChkKSBCZWVzIChlKSBLb2FsYXMgKGYpIE1vdW50YWlucyAoZykgVHJlZXMgKGgpIFBlb3BsZSJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiTGV0J3MgZ28gdGhyb3VnaCBlYWNoIG9wdGlvbiBhbmQgZXhwbGFpbiB3aHkgaXQgaXMgaW5jb3JyZWN0OlxcblxcbmEpIEJhdHM6IFdoaWxlIGJhdHMgYXJlIGNhcGFibGUgb2Ygc2hpdmVyaW5nLCB0aGV5IGFyZSBub3QgdGhlIG9ubHkgYW5pbWFscyB0aGF0IGNhbiBzaGl2ZXIuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgbm90IHRoZSBjb3JyZWN0IGFuc3dlci5cXG5cXG5iKSBTaWRld2Fsa3M6IFNpZGV3YWxrcyBhcmUgbm90IGxpdmluZyBvcmdhbmlzbXMgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgc2hpdmVyLiBUaGlzIG9wdGlvbiBpcyBub3QgdGhlIGNvcnJlY3QgYW5zd2VyLlxcblxcbmMpIEh1bWFuczogSHVtYW5zIGFyZSBjYXBhYmxlIG9mIHNoaXZlcmluZywgYnV0IHRoZXkgYXJlIG5vdCB0aGUgb25seSBhbmltYWxzIHRoYXQgY2FuIHNoaXZlci4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBub3QgdGhlIGNvcnJlY3QgYW5zd2VyLlxcblxcbmUpIEtvYWxhczogS29hbGFzIGFyZSBjYXBhYmxlIG9mIHNoaXZlcmluZywgYnV0IHRoZXkgYXJlIG5vdCB0aGUgb25seSBhbmltYWxzIHRoYXQgY2FuIHNoaXZlci4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBub3QgdGhlIGNvcnJlY3QgYW5zd2VyLlxcblxcbmYpIE1vdW50YWluczogTW91bnRhaW5zIGFyZSBub3QgbGl2aW5nIG9yZ2FuaXNtcyBhbmQgdGhlcmVmb3JlIGNhbm5vdCBzaGl2ZXIuIFRoaXMgb3B0aW9uIGlzIG5vdCB0aGUgY29ycmVjdCBhbnN3ZXIuXFxuXFxuZykgVHJlZXM6IFRyZWVzIGFyZSBub3QgY2FwYWJsZSBvZiBzaGl2ZXJpbmcgYXMgdGhleSBkbyBub3QgaGF2ZSBtdXNjbGVzLiBUaGlzIG9wdGlvbiBpcyBub3QgdGhlIGNvcnJlY3QgYW5zd2VyLlxcblxcbmgpIFBlb3BsZTogVGhpcyBvcHRpb24gaXMgdGhlIHNhbWUgYXMgb3B0aW9uIGMuIEh1bWFucyBhcmUgY2FwYWJsZSBvZiBzaGl2ZXJpbmcsIGJ1dCB0aGV5IGFyZSBub3QgdGhlIG9ubHkgYW5pbWFscyB0aGF0IGNhbiBzaGl2ZXIuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgbm90IHRoZSBjb3JyZWN0IGFuc3dlci5cXG5cXG5kKSBIb25leSBiZWVzOiBIb25leSBiZWVzIGFyZSBjYXBhYmxlIG9mIHNoaXZlcmluZyB0byBnZW5lcmF0ZSBoZWF0IGFuZCBtYWludGFpbiB0aGVpciBib2R5IHRlbXBlcmF0dXJlLiBUaGlzIG9wdGlvbiBpcyB0aGUgY29ycmVjdCBhbnN3ZXIuXFxuXFxuSW4gY29uY2x1c2lvbiwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGQpIGhvbmV5IGJlZXMgY2FuIHNoaXZlci4gSXQgaXMgaW1wb3J0YW50IHRvIHJlYWQgdGhlIHF1ZXN0aW9uIGFuZCBvcHRpb25zIGNhcmVmdWxseSBhbmQgZWxpbWluYXRlIHRoZSBvcHRpb25zIHRoYXQgYXJlIG5vdCBsb2dpY2FsIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbS5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJkXCJ9In1dLCAiMTQiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBLaXR0ZW5zIHRoYXQgYXJlIHByYWN0aWNpbmcgaHVudGluZyBpcyBhbiBleGFtcGxlIG9mIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIExlYXJuaW5nIGJlaGF2aW9yIChiKSBDb21wZXRpbmcgZm9yIHJlc291cmNlcyAoYykgV2FybS1ibG9vZGVkIChkKSBDb21wZXRpdGlvbiAoZSkgQmFkIGJlaGF2aW9yIChmKSBMZWFybmluZyBub3RoaW5nIChnKSBFeHRpbmd1aXNoaW5nIGJlaGF2aW9yIChoKSBFbmVyZ3kgb2YgbW92aW5nIG9iamVjdHMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcImIpIENvbXBldGluZyBmb3IgcmVzb3VyY2VzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIGJlaGF2aW9yIG9mIGtpdHRlbnMgcHJhY3RpY2luZyBodW50aW5nLiBDb21wZXRpbmcgZm9yIHJlc291cmNlcyByZWZlcnMgdG8gYW5pbWFscyBjb21wZXRpbmcgZm9yIGxpbWl0ZWQgcmVzb3VyY2VzIHN1Y2ggYXMgZm9vZCwgd2F0ZXIsIG9yIHNoZWx0ZXIuIEh1bnRpbmcgYmVoYXZpb3IgaXMgbm90IHJlbGF0ZWQgdG8gcmVzb3VyY2UgY29tcGV0aXRpb24uXFxuXFxuYykgV2FybS1ibG9vZGVkOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgYmVoYXZpb3Igb2Yga2l0dGVucyBwcmFjdGljaW5nIGh1bnRpbmcuIFdhcm0tYmxvb2RlZCByZWZlcnMgdG8gYW5pbWFscyB0aGF0IGNhbiByZWd1bGF0ZSB0aGVpciBib2R5IHRlbXBlcmF0dXJlIGludGVybmFsbHksIGJ1dCBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlaXIgYmVoYXZpb3IuXFxuXFxuZCkgQ29tcGV0aXRpb246IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGlzIHRvbyBicm9hZCBhbmQgZG9lcyBub3Qgc3BlY2lmaWNhbGx5IHJlbGF0ZSB0byB0aGUgYmVoYXZpb3Igb2Yga2l0dGVucyBwcmFjdGljaW5nIGh1bnRpbmcuIENvbXBldGl0aW9uIGNhbiByZWZlciB0byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBpbnRlcmFjdGlvbnMgYmV0d2VlbiBhbmltYWxzLCBidXQgaXQgZG9lcyBub3Qgc3BlY2lmaWNhbGx5IHJlbGF0ZSB0byBodW50aW5nIGJlaGF2aW9yLlxcblxcbmUpIEJhZCBiZWhhdmlvcjogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgaXQgaXMgc3ViamVjdGl2ZSBhbmQgZG9lcyBub3QgcHJvdmlkZSBhIGNsZWFyIGV4cGxhbmF0aW9uIG9mIHRoZSBiZWhhdmlvciBvZiBraXR0ZW5zIHByYWN0aWNpbmcgaHVudGluZy4gSHVudGluZyBiZWhhdmlvciBpcyBhIG5hdHVyYWwgYmVoYXZpb3IgZm9yIGNhdHMgYW5kIGlzIG5vdCBjb25zaWRlcmVkIGJhZCBiZWhhdmlvci5cXG5cXG5mKSBMZWFybmluZyBub3RoaW5nOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBpcyBub3QgYWNjdXJhdGUuIEtpdHRlbnMgdGhhdCBhcmUgcHJhY3RpY2luZyBodW50aW5nIGFyZSBhY3R1YWxseSBsZWFybmluZyBpbXBvcnRhbnQgc2tpbGxzIHRoYXQgdGhleSB3aWxsIG5lZWQgdG8gc3Vydml2ZSBhcyBhZHVsdCBjYXRzLiBIdW50aW5nIGJlaGF2aW9yIGlzIGEgbGVhcm5lZCBiZWhhdmlvciB0aGF0IHJlcXVpcmVzIHByYWN0aWNlIGFuZCByZWZpbmVtZW50LlxcblxcbmcpIEV4dGluZ3Vpc2hpbmcgYmVoYXZpb3I6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgYmVoYXZpb3Igb2Yga2l0dGVucyBwcmFjdGljaW5nIGh1bnRpbmcuIEV4dGluZ3Vpc2hpbmcgYmVoYXZpb3IgcmVmZXJzIHRvIHRoZSBwcm9jZXNzIG9mIGVsaW1pbmF0aW5nIGEgYmVoYXZpb3IgdGhyb3VnaCBwdW5pc2htZW50IG9yIG5lZ2F0aXZlIHJlaW5mb3JjZW1lbnQsIGJ1dCBpdCBkb2VzIG5vdCByZWxhdGUgdG8gbGVhcm5pbmcgYmVoYXZpb3IuXFxuXFxuaCkgRW5lcmd5IG9mIG1vdmluZyBvYmplY3RzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIGJlaGF2aW9yIG9mIGtpdHRlbnMgcHJhY3RpY2luZyBodW50aW5nLiBUaGUgZW5lcmd5IG9mIG1vdmluZyBvYmplY3RzIHJlZmVycyB0byB0aGUgcGh5c2ljcyBvZiBtb3Rpb24gYW5kIGRvZXMgbm90IHJlbGF0ZSB0byBhbmltYWwgYmVoYXZpb3IuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgYSkgbGVhcm5pbmcgYmVoYXZpb3IsIGFzIGtpdHRlbnMgdGhhdCBhcmUgcHJhY3RpY2luZyBodW50aW5nIGFyZSBsZWFybmluZyBpbXBvcnRhbnQgc2tpbGxzIHRoYXQgdGhleSB3aWxsIG5lZWQgdG8gc3Vydml2ZSBhcyBhZHVsdCBjYXRzLlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICIxNSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IERlYWQgb3JnYW5pc21zIGNhbiBjcmVhdGUgZW5lcmd5IGFmdGVyIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEJ1cm5pbmcgKGIpIFdpbnRlciAoYykgTXV0YXRpb25zIChkKSBDb29raW5nIChlKSBDeWNsZXMgKGYpIFN1bW1lciAoZykgRnJlZXppbmcgKGgpIEd1bnNob3RzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJiKSBXaW50ZXI6IFdpbnRlciBpcyBhIHNlYXNvbiBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBlbmVyZ3kgZnJvbSBkZWFkIG9yZ2FuaXNtcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuYykgTXV0YXRpb25zOiBNdXRhdGlvbnMgYXJlIGNoYW5nZXMgaW4gdGhlIGdlbmV0aWMgbWF0ZXJpYWwgb2YgYW4gb3JnYW5pc20gYW5kIGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGNyZWF0aW5nIGVuZXJneSBmcm9tIGRlYWQgb3JnYW5pc21zLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5kKSBDb29raW5nOiBDb29raW5nIGlzIGEgcHJvY2VzcyBvZiBwcmVwYXJpbmcgZm9vZCBieSBoZWF0aW5nIGl0LCBhbmQgaXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBlbmVyZ3kgZnJvbSBkZWFkIG9yZ2FuaXNtcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZSkgQ3ljbGVzOiBDeWNsZXMgY2FuIHJlZmVyIHRvIG1hbnkgdGhpbmdzLCBidXQgbm9uZSBvZiB0aGVtIGFyZSByZWxhdGVkIHRvIGNyZWF0aW5nIGVuZXJneSBmcm9tIGRlYWQgb3JnYW5pc21zLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5mKSBTdW1tZXI6IFN1bW1lciBpcyBhIHNlYXNvbiBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBlbmVyZ3kgZnJvbSBkZWFkIG9yZ2FuaXNtcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZykgRnJlZXppbmc6IEZyZWV6aW5nIGlzIGEgcHJvY2VzcyBvZiBsb3dlcmluZyB0aGUgdGVtcGVyYXR1cmUgb2Ygc29tZXRoaW5nIHRvIGJlbG93IGl0cyBmcmVlemluZyBwb2ludCwgYW5kIGl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY3JlYXRpbmcgZW5lcmd5IGZyb20gZGVhZCBvcmdhbmlzbXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmgpIEd1bnNob3RzOiBHdW5zaG90cyBhcmUgYSBzdWRkZW4gbG91ZCBub2lzZSBjYXVzZWQgYnkgYSBidWxsZXQgb3Igb3RoZXIgcHJvamVjdGlsZSBhbmQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggY3JlYXRpbmcgZW5lcmd5IGZyb20gZGVhZCBvcmdhbmlzbXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGEpIGJ1cm5pbmcuIEJ1cm5pbmcgZGVhZCBvcmdhbmlzbXMgY2FuIGNyZWF0ZSBlbmVyZ3kgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBjb21idXN0aW9uLCB3aGljaCByZWxlYXNlcyBlbmVyZ3kgaW4gdGhlIGZvcm0gb2YgaGVhdCBhbmQgbGlnaHQuIFRoaXMgZW5lcmd5IGNhbiBiZSBoYXJuZXNzZWQgdG8gZ2VuZXJhdGUgZWxlY3RyaWNpdHkgb3IgcG93ZXIgZW5naW5lcy5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJhXCJ9In1dLCAiMTYiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBUdXJuaW5nIG9uIHdoYXQgd2lsbCBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFZlaGljbGVzIChiKSBTYXRlbGxpdGVzIChjKSBMaWdodCBidWxiIChkKSBCdXNlcyAoZSkgRmlyZWNyYWNrZXJzIChmKSBTZW5zb3J5IG5ldXJvbnMgKGcpIEFuIG9iamVjdCAoaCkgRW5naW5lcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiYSkgVmVoaWNsZXM6IFR1cm5pbmcgb24gYSB2ZWhpY2xlIGRvZXMgbm90IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi4gVmVoaWNsZXMgZW1pdCB2YXJpb3VzIHR5cGVzIG9mIHJhZGlhdGlvbiwgc3VjaCBhcyB0aGVybWFsIHJhZGlhdGlvbiBhbmQgc291bmQgd2F2ZXMsIGJ1dCBub3QgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi5cXG5cXG5iKSBTYXRlbGxpdGVzOiBTYXRlbGxpdGVzIGNhbiBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24sIGJ1dCBub3Qgc2ltcGx5IGJ5IHR1cm5pbmcgdGhlbSBvbi4gU2F0ZWxsaXRlcyBhcmUgZGVzaWduZWQgdG8gcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiwgc3VjaCBhcyByYWRpbyB3YXZlcywgYnV0IHRoZXkgZG8gbm90IGVtaXQgcmFkaWF0aW9uIGp1c3QgYnkgYmVpbmcgdHVybmVkIG9uLlxcblxcbmQpIEJ1c2VzOiBTaW1pbGFyIHRvIHZlaGljbGVzLCB0dXJuaW5nIG9uIGEgYnVzIGRvZXMgbm90IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi4gQnVzZXMgZW1pdCB2YXJpb3VzIHR5cGVzIG9mIHJhZGlhdGlvbiwgc3VjaCBhcyB0aGVybWFsIHJhZGlhdGlvbiBhbmQgc291bmQgd2F2ZXMsIGJ1dCBub3QgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi5cXG5cXG5lKSBGaXJlY3JhY2tlcnM6IEZpcmVjcmFja2VycyBkbyBub3QgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIHdoZW4gdGhleSBhcmUgdHVybmVkIG9uLiBUaGV5IGVtaXQgbGlnaHQgYW5kIHNvdW5kLCBidXQgbm90IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24uXFxuXFxuZikgU2Vuc29yeSBuZXVyb25zOiBTZW5zb3J5IG5ldXJvbnMgYXJlIHBhcnQgb2YgdGhlIG5lcnZvdXMgc3lzdGVtIGFuZCBkbyBub3QgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLlxcblxcbmcpIEFuIG9iamVjdDogQW4gb2JqZWN0IGRvZXMgbm90IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiBqdXN0IGJ5IGJlaW5nIHR1cm5lZCBvbi4gSG93ZXZlciwgc29tZSBvYmplY3RzIGNhbiBlbWl0IHJhZGlhdGlvbiBpZiB0aGV5IGFyZSBoZWF0ZWQgb3IgZW5lcmdpemVkLCBzdWNoIGFzIGEgbGlnaHQgYnVsYi5cXG5cXG5oKSBFbmdpbmVzOiBFbmdpbmVzIGRvIG5vdCBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24gd2hlbiB0aGV5IGFyZSB0dXJuZWQgb24uIFRoZXkgZW1pdCB2YXJpb3VzIHR5cGVzIG9mIHJhZGlhdGlvbiwgc3VjaCBhcyB0aGVybWFsIHJhZGlhdGlvbiBhbmQgc291bmQgd2F2ZXMsIGJ1dCBub3QgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyBjKSBsaWdodCBidWxiLCBhcyB0dXJuaW5nIG9uIGEgbGlnaHQgYnVsYiBlbWl0cyBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIGluIHRoZSBmb3JtIG9mIHZpc2libGUgbGlnaHQuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjE3IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hlcmUgaXMgYSB6eWdvdGUgZm9ybWVkIGJ5IHNwZXJtIHN3aW1taW5nIHRvIGFuIGVnZz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQ29sZGVyIGFuZCB3ZXR0ZXIgKGIpIE9jZWFuIHdhdGVyIChjKSBHcmFwdG9saXRlcyAoZCkgUmFwaWQgZXhwYW5zaW9uIChlKSBBIGRlbHRhIChmKSBBbiBhcmNoZWdvbml1bSAoZykgQmFybmFjbGVzIChoKSBBbiBvcmdhbmlzbSdzIGJvZHkifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcImEpIENvbGRlciBhbmQgd2V0dGVyOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHByb3ZpZGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZC4gSXQgaXMganVzdCBhIGRlc2NyaXB0aW9uIG9mIGEgY2xpbWF0ZSBjb25kaXRpb24uXFxuXFxuYikgT2NlYW4gd2F0ZXI6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYSB6eWdvdGUgaXMgZm9ybWVkLiBJdCBpcyBqdXN0IGEgZGVzY3JpcHRpb24gb2YgYSB0eXBlIG9mIHdhdGVyLlxcblxcbmMpIEdyYXB0b2xpdGVzOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGdyYXB0b2xpdGVzIGFyZSBleHRpbmN0IG1hcmluZSBhbmltYWxzIHRoYXQgbGl2ZWQgZHVyaW5nIHRoZSBQYWxlb3pvaWMgZXJhLiBUaGV5IGhhdmUgbm90aGluZyB0byBkbyB3aXRoIHRoZSBmb3JtYXRpb24gb2YgYSB6eWdvdGUuXFxuXFxuZCkgUmFwaWQgZXhwYW5zaW9uOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHByb3ZpZGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZC4gSXQgaXMganVzdCBhIGRlc2NyaXB0aW9uIG9mIGEgcHJvY2Vzcy5cXG5cXG5lKSBBIGRlbHRhOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGEgZGVsdGEgaXMgYSBsYW5kZm9ybSB0aGF0IGlzIGZvcm1lZCBhdCB0aGUgbW91dGggb2YgYSByaXZlci4gSXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgZm9ybWF0aW9uIG9mIGEgenlnb3RlLlxcblxcbmcpIEJhcm5hY2xlczogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBiYXJuYWNsZXMgYXJlIG1hcmluZSBhbmltYWxzIHRoYXQgcmVwcm9kdWNlIHRocm91Z2ggZXh0ZXJuYWwgZmVydGlsaXphdGlvbi4gVGhleSBkbyBub3QgaGF2ZSBhbiBhcmNoZWdvbml1bSB3aGVyZSBhIHp5Z290ZSBpcyBmb3JtZWQuXFxuXFxuaCkgQW4gb3JnYW5pc20ncyBib2R5OiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHByb3ZpZGUgYW55IGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZC4gSXQgaXMganVzdCBhIGRlc2NyaXB0aW9uIG9mIGEgZ2VuZXJhbCBsb2NhdGlvbi5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyBmKSBhbiBhcmNoZWdvbml1bSwgd2hpY2ggaXMgYSBzdHJ1Y3R1cmUgZm91bmQgaW4gc29tZSBwbGFudHMgYW5kIGFsZ2FlIHdoZXJlIHRoZSBlZ2cgaXMgZmVydGlsaXplZCBieSB0aGUgc3Blcm0sIGZvcm1pbmcgYSB6eWdvdGUuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZlwifSJ9XSwgIjE4IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBjYW4gY2F1c2UgaGFybSB0byB0aGUgZXllcz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgTWlsZGV3IChiKSBOb3JtYWwgd2F0ZXIgKGMpIEhlcnBlcyAoZCkgTm9ybWFsIGFpciAoZSkgQ29hbCAoZikgTW9sZCAoZykgQWNpZCAoaCkgQ29udGFjdCBzb2x1dGlvbiJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiYSkgTWlsZGV3OiBXaGlsZSBtaWxkZXcgY2FuIGNhdXNlIHJlc3BpcmF0b3J5IHByb2JsZW1zLCBpdCBpcyBub3Qga25vd24gdG8gY2F1c2UgaGFybSB0byB0aGUgZXllcyBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuYikgTm9ybWFsIHdhdGVyOiBOb3JtYWwgd2F0ZXIgaXMgbm90IGhhcm1mdWwgdG8gdGhlIGV5ZXMuIEluIGZhY3QsIGl0IGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgZXllIGhlYWx0aC4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuYykgSGVycGVzOiBIZXJwZXMgaXMgYSB2aXJhbCBpbmZlY3Rpb24gdGhhdCBjYW4gY2F1c2UgY29sZCBzb3JlcyBvciBnZW5pdGFsIHNvcmVzLiBXaGlsZSBpdCBjYW4gY2F1c2UgZXllIGluZmVjdGlvbnMsIGl0IGlzIG5vdCBhIGRpcmVjdCBjYXVzZSBvZiBoYXJtIHRvIHRoZSBleWVzLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5kKSBOb3JtYWwgYWlyOiBOb3JtYWwgYWlyIGlzIG5vdCBoYXJtZnVsIHRvIHRoZSBleWVzLiBJbiBmYWN0LCBpdCBpcyBlc3NlbnRpYWwgZm9yIGJyZWF0aGluZyBhbmQgbWFpbnRhaW5pbmcgb3ZlcmFsbCBoZWFsdGguIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmUpIENvYWw6IENvYWwgZHVzdCBjYW4gY2F1c2UgaGFybSB0byB0aGUgZXllcyBpZiBpdCBnZXRzIGludG8gdGhlbS4gSG93ZXZlciwgY29hbCBpdHNlbGYgaXMgbm90IGEgZGlyZWN0IGNhdXNlIG9mIGhhcm0gdG8gdGhlIGV5ZXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmYpIE1vbGQ6IE1vbGQgY2FuIGNhdXNlIHJlc3BpcmF0b3J5IHByb2JsZW1zLCBidXQgaXQgaXMgbm90IGtub3duIHRvIGNhdXNlIGhhcm0gdG8gdGhlIGV5ZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmgpIENvbnRhY3Qgc29sdXRpb246IFdoaWxlIGNvbnRhY3Qgc29sdXRpb24gY2FuIGNhdXNlIGlycml0YXRpb24gb3IgaW5mZWN0aW9uIGlmIG5vdCB1c2VkIHByb3Blcmx5LCBpdCBpcyBub3QgYSBkaXJlY3QgY2F1c2Ugb2YgaGFybSB0byB0aGUgZXllcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZykgQWNpZDogQWNpZCBjYW4gY2F1c2Ugc2V2ZXJlIGhhcm0gdG8gdGhlIGV5ZXMsIGluY2x1ZGluZyBjaGVtaWNhbCBidXJucyBhbmQgcGVybWFuZW50IGRhbWFnZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBjb3JyZWN0LlxcblxcbkluIGNvbmNsdXNpb24sIHRoZSBjb3JyZWN0IGFuc3dlciBpcyBnKSBhY2lkLCBhcyBpdCBpcyB0aGUgb25seSBvcHRpb24gdGhhdCBjYW4gY2F1c2UgZGlyZWN0IGhhcm0gdG8gdGhlIGV5ZXMuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZ1wifSJ9XSwgIjE5IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBmb3JtcyBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQmFtYm9vIChiKSBEZXNpY2NhdGlvbiAoYykgQnVycnMgKGQpIEVsbXMgKGUpIE1vc3MgKGYpIENvYWwgKGcpIENhbmR5IChoKSBNZWF0In0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJhKSBCYW1ib286IEJhbWJvbyBpcyBhIHR5cGUgb2YgZ3Jhc3MgdGhhdCBncm93cyBpbiB0cm9waWNhbCBhbmQgc3VidHJvcGljYWwgcmVnaW9ucy4gSXQgZG9lcyBub3QgZm9ybSBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuYikgRGVzaWNjYXRpb246IERlc2ljY2F0aW9uIGlzIHRoZSBwcm9jZXNzIG9mIHJlbW92aW5nIG1vaXN0dXJlIGZyb20gc29tZXRoaW5nLiBJdCBkb2VzIG5vdCBmb3JtIGludG8gcGVhdCB0aHJvdWdoIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5jKSBCdXJyczogQnVycnMgYXJlIHNtYWxsLCBwcmlja2x5IHNlZWRzIHRoYXQgYXR0YWNoIHRoZW1zZWx2ZXMgdG8gY2xvdGhpbmcgb3IgYW5pbWFsIGZ1ci4gVGhleSBkbyBub3QgZm9ybSBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZCkgRWxtczogRWxtcyBhcmUgZGVjaWR1b3VzIHRyZWVzIHRoYXQgZ3JvdyBpbiB0ZW1wZXJhdGUgcmVnaW9ucy4gVGhleSBkbyBub3QgZm9ybSBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZikgQ29hbDogQ29hbCBpcyBhIGZvc3NpbCBmdWVsIHRoYXQgZm9ybXMgZnJvbSB0aGUgcmVtYWlucyBvZiBwbGFudHMgdGhhdCBsaXZlZCBtaWxsaW9ucyBvZiB5ZWFycyBhZ28uIEl0IGZvcm1zIHRocm91Z2ggYSBwcm9jZXNzIG9mIGhlYXQgYW5kIHByZXNzdXJlLCBidXQgaXQgaXMgbm90IGZvcm1lZCBmcm9tIG1vc3MuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmcpIENhbmR5OiBDYW5keSBpcyBhIHN3ZWV0IGZvb2QgbWFkZSBmcm9tIHN1Z2FyIG9yIGNob2NvbGF0ZS4gSXQgZG9lcyBub3QgZm9ybSBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuaCkgTWVhdDogTWVhdCBpcyB0aGUgZmxlc2ggb2YgYW5pbWFscyB0aGF0IGlzIHVzZWQgYXMgZm9vZC4gSXQgZG9lcyBub3QgZm9ybSBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZSkgTW9zczogTW9zcyBpcyBhIHNtYWxsLCBub24tdmFzY3VsYXIgcGxhbnQgdGhhdCBncm93cyBpbiBkYW1wIGVudmlyb25tZW50cy4gSXQgY2FuIGZvcm0gaW50byBwZWF0IHRocm91Z2ggZXh0cmVtZSBoZWF0IGFuZCBwcmVzc3VyZSBvdmVyIHRpbWUuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgY29ycmVjdC5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJlXCJ9In1dfSwgImNvbnZlcnNhdGlvbl9SRkFfZmFsY29uIjogeyIwIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBpcyBzYXRlbGxpdGUgdGVjaG5vbG9neSB1c2VkIGZvciBwcmVkaWN0aW5nP1xuQW5zd2VyIENob2ljZXM6IChhKSBTZWNvbmRzIGFuZCBtaW51dGVzIChiKSBUaGUgc3RyZW5ndGggYW5kIG1hZ25pdHVkZSBvZiBhbiBlYXJ0aHF1YWtlIChjKSBXaGF0IGl0J3MgbGlrZSBvdXRzaWRlIGVhY2ggZGF5IChkKSA3MC03NSBkZWdyZWVzIGZhaHJlbmhlaXQgKGUpIFJhcGlkIGNoYW5nZXMgb2NjdXIgKGYpIERlYWQtZW5kcyBhbmQgZmFsc2Ugc3RhcnRzLiAoZykgU25vdywgaWNlLCBhbmQgcm9jayAoaCkgQXJvdW5kIDUgdG8gMjcgZGVncmVlcyBjZWxzaXVzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCItIChhKSBTZWNvbmRzIGFuZCBtaW51dGVzOiBTYXRlbGxpdGUgdGVjaG5vbG9neSBpcyBub3QgdXNlZCB0byBwcmVkaWN0IHNlY29uZHMgYW5kIG1pbnV0ZXMuIFRoaXMgaXMgdG9vIHNwZWNpZmljIGFuZCBub3Qgd2hhdCBzYXRlbGxpdGUgdGVjaG5vbG9neSBpcyBnZW5lcmFsbHkgdXNlZCBmb3IuIFNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIHVzZWQgZm9yIGJyb2FkZXIgdGltZSBzY2FsZXMsIHN1Y2ggYXMgZGF5cywgd2Vla3MsIG1vbnRocywgYW5kIHllYXJzLlxcbi0gKGIpIFRoZSBzdHJlbmd0aCBhbmQgbWFnbml0dWRlIG9mIGFuIGVhcnRocXVha2U6IFdoaWxlIHNvbWUgdHlwZXMgb2Ygc2F0ZWxsaXRlIGRhdGEgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBpbmZvcm1hdGlvbiB0byBzdHVkeSBzZWlzbWljaXR5LCBlYXJ0aHF1YWtlcyB0aGVtc2VsdmVzIGFyZSB0eXBpY2FsbHkgcHJlZGljdGVkIHVzaW5nIG90aGVyIG1ldGhvZHMsIGxpa2Ugc2Vpc21vZ3JhcGhzIGFuZCBnZW9sb2dpY2FsIHN0dWRpZXMuXFxuLSAoZCkgNzAtNzUgZGVncmVlcyBmYWhyZW5oZWl0OiBUaGlzIGlzIGEgc3BlY2lmaWMgdGVtcGVyYXR1cmUgcmFuZ2UsIGFuZCBzYXRlbGxpdGVzIGNhbm5vdCBwcmVkaWN0IGV4YWN0IHRlbXBlcmF0dXJlIHJhbmdlcyBsaWtlIHRoaXMuIFdoaWxlIHNhdGVsbGl0ZXMgZG8gcGxheSBhIHJvbGUgaW4gd2VhdGhlciBwcmVkaWN0aW9uLCB3aGljaCBpbmNsdWRlcyB0ZW1wZXJhdHVyZSwgcHJlZGljdGluZyBzcGVjaWZpYyByYW5nZXMgd2l0aGluIGEgZGF5IGlzbid0IGEgdHlwaWNhbCBhcHBsaWNhdGlvbi5cXG4tIChlKSBSYXBpZCBjaGFuZ2VzIG9jY3VyOiBXaGlsZSBzYXRlbGxpdGVzIGNhbiBkZXRlY3QgcmFwaWQgY2hhbmdlcyBpbiBtYW55IGFyZWFzLCBzdWNoIGFzIGNsb3VkIGNvdmVyLCB3ZWF0aGVyIGZyb250cywgb3Igdm9sY2FuaWMgYWN0aXZpdHksIHRoZSBwaHJhc2UgJ3JhcGlkIGNoYW5nZXMgb2NjdXInIGlzIHRvbyB2YWd1ZS4gSXQgY291bGQgYXBwbHkgdG8gdmFyaW91cyBwaGVub21lbmEsIHNvIGl0J3Mgbm90IHNwZWNpZmljYWxseSBhYm91dCBwcmVkaWN0aW9ucyByZWxhdGVkIHRvIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGFsb25lLlxcbi0gKGYpIERlYWQtZW5kcyBhbmQgZmFsc2Ugc3RhcnRzOiBUaGVzZSBkZXNjcmlwdGlvbnMgcmVsYXRlIHRvIGh1bWFuIGJlaGF2aW9yIGFuZCBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzc2VzLCBub3QgcHJlZGljdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHNhdGVsbGl0ZSB0ZWNobm9sb2d5Llxcbi0gKGcpIFNub3csIGljZSwgYW5kIHJvY2s6IFRoaXMgaXMgYSB2ZXJ5IHNwZWNpZmljIGNvbWJpbmF0aW9uIG9mIHdlYXRoZXIgYW5kIGdlb2xvZ2ljYWwgZmVhdHVyZXMuIFdoaWxlIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGNhbiBjZXJ0YWlubHkgYmUgdXNlZCB0byBtb25pdG9yIHNub3csIGljZSwgYW5kIHJvY2sgJiBzb2lsIGNoYW5nZXMgKGZvciBsYW5kc2xpZGUgZGV0ZWN0aW9uLCBmb3IgZXhhbXBsZSksIGl0J3Mgbm90IHNwZWNpZmljYWxseSBhYm91dCBwcmVkaWN0aW5nIHRoZXNlIHBoZW5vbWVuYSBpbiB0aGUgd2F5IHRoZSBxdWVzdGlvbiBzdWdnZXN0cy5cXG4tIChoKSBBcm91bmQgNSB0byAyNyBkZWdyZWVzIGNlbHNpdXM6IFNpbWlsYXIgdG8gKGQpLCB0aGlzIGlzIGEgc3BlY2lmaWMgdGVtcGVyYXR1cmUgcmFuZ2UsIGFuZCBzYXRlbGxpdGVzIGFsb25lIGNhbm5vdCBwcmVkaWN0IHNwZWNpZmljIHRlbXBlcmF0dXJlIHJhbmdlcyBzbyBwcmVjaXNlbHkuXFxuXFxuVGhlIGNvcnJlY3QgYW5zd2VyLCAoYykgV2hhdCBpdCdzIGxpa2Ugb3V0c2lkZSBlYWNoIGRheSwgdG91Y2hlcyBvbiBhIGJyb2FkZXIgcmFuZ2Ugb2YgZW52aXJvbm1lbnRhbCBjb25kaXRpb25zLCB3aGljaCBzYXRlbGxpdGUgdGVjaG5vbG9neSBjYW4gcHJvdmlkZSBkYXRhIG9uLiBTYXRlbGxpdGVzIHRyYWNrIHdlYXRoZXIgcGF0dGVybnMsIGNsb3VkIGNvdmVyLCBzdW5saWdodCwgYW5kIG90aGVyIGluZGljYXRvcnMgdGhhdCBnaXZlIHVzIGFuIGlkZWEgb2YgdGhlIG91dHNpZGUgY29uZGl0aW9ucyBhbG1vc3QgZGFpbHkuIFxcblxcblRoaXMgYnJvYWQsIGRhaWx5IG92ZXJ2aWV3IG9mIGVudmlyb25tZW50YWwgY29uZGl0aW9ucyBpcyBzb21ldGhpbmcgdGhhdCBzYXRlbGxpdGVzIGNhbiBwcm92aWRlLCB1bmxpa2UgdGhlIG1vcmUgbmFycm93IGFuZCBzcGVjaWZpYyBwcmVkaWN0aW9ucyBtZW50aW9uZWQgaW4gdGhlIG90aGVyIG9wdGlvbnMuIEFsdGhvdWdoIGl0J3Mgbm90IGEgdGVjaG5pY2FsICdwcmVkaWN0aW9uJyBpbiB0aGUgc2Vuc2Ugb2YgZm9yZWNhc3RpbmcgZXhhY3QgZXZlbnRzIGFsbCB0aGUgdGltZSwgaXQgZG9lcyBwcm92aWRlIHVwLXRvLWRhdGUgYW5kIGN1cnJlbnQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpdCdzIGxpa2Ugb3V0c2lkZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYW5kIGluZm9ybSBvdGhlciBwcmVkaWN0aW9ucyByZWxhdGVkIHRvIHdlYXRoZXIgYW5kIGVudmlyb25tZW50LlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImNcIn0ifV0sICIxIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBkb2VzIGlycmFkaWF0aW5nIGZvb2QgZG8/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFJlbGlldmUgcGFpbiAoYikgRW5oYW5jZSBmb29kJ3MgbnV0cmllbnRzIChjKSBJbXByb3ZlcyBmb29kIHNhZmV0eSAoZCkgQWxsb3dzIGdyb3d0aCBvZiBiYWN0ZXJpYSAoZSkgSW5jcmVhc2VzIGZvb2Qgd2FzdGUgKGYpIENoZW1pY2FsIGNoYW5nZXMgKGcpIEdldCBjaGVtaWNhbCByZWFjdGlvbnMgc3RhcnRlZCAoaCkgTWFqb3IgdGhyZWF0IHRvIGhlYWx0aCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiKGEpIFJlbGlldmUgcGFpbjogSXJyYWRpYXRpbmcgZm9vZCBkb2VzIG5vdCBoYXZlIGFuIGVmZmVjdCBvbiBwYWluLiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBmb29kIGlycmFkaWF0aW9uIGlzIGEgcHJvY2VzcyBmb2N1c2VkIG9uIGVuc3VyaW5nIGZvb2Qgc2FmZXR5IGJ5IHJlZHVjaW5nIGhhcm1mdWwgYmFjdGVyaWEsIG5vdCBvbiBhbGxldmlhdGluZyBwYWluLlxcblxcbihiKSBFbmhhbmNlIGZvb2QncyBudXRyaWVudHM6IFdoaWxlIHNvbWUgc3R1ZGllcyBzdWdnZXN0IGlycmFkaWF0aW9uIGNvdWxkIHNsaWdodGx5IGVuaGFuY2UgbnV0cmllbnQgbGV2ZWxzLCBpdCBpcyBub3QgdGhlIHByaW1hcnkgYmVuZWZpdCBvZiBmb29kIGlycmFkaWF0aW9uLiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSB0aGUgbWFpbiBwdXJwb3NlIGlzIHRvIGVuc3VyZSBmb29kIHNhZmV0eSwgbm90IG5lY2Vzc2FyaWx5IHRvIGVuaGFuY2UgbnV0cmllbnRzLlxcblxcbihjKSBJbXByb3ZlcyBmb29kIHNhZmV0eTogVGhpcyBpcyB0aGUgY29ycmVjdCBhbnN3ZXIuIEZvb2QgaXJyYWRpYXRpb24gaXMgYSBwcm9jZXNzIHdoZXJlIGZvb2QgaXMgZXhwb3NlZCB0byBhIHNwZWNpZmljIGxldmVsIG9mIGlvbml6aW5nIHJhZGlhdGlvbiB0byBraWxsIG9yIGluYWN0aXZhdGUgcGF0aG9nZW5zIChiYWN0ZXJpYSwgdmlydXNlcywgcGFyYXNpdGVzKSwgcmVkdWNpbmcgdGhlIHJpc2sgb2YgZm9vZGJvcm5lIGlsbG5lc3Nlcy4gVGhpcyBtYWtlcyBpdCBzYWZlciBmb3IgY29uc3VtZXJzLlxcblxcbihkKSBBbGxvd3MgZ3Jvd3RoIG9mIGJhY3RlcmlhOiBUaGlzIGlzIGluY29ycmVjdC4gRm9vZCBpcnJhZGlhdGlvbiBpcyBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIHBvcHVsYXRpb24gb2YgaGFybWZ1bCBiYWN0ZXJpYSB0aGF0IGNhbiBjYXVzZSBmb29kYm9ybmUgaWxsbmVzc2VzLiBJdCBkb2VzIG5vdCBhbGxvdyBvciBwcm9tb3RlIGJhY3RlcmlhbCBncm93dGguXFxuXFxuKGUpIEluY3JlYXNlcyBmb29kIHdhc3RlOiBUaGlzIGlzIGluY29ycmVjdC4gSW4gZmFjdCwgaXJyYWRpYXRpb24gY2FuIGhlbHAgcmVkdWNlIGZvb2Qgd2FzdGUgYnkgcHJlc2VydmluZyBmb29kIGZvciBsb25nZXIgcGVyaW9kcywgdGhlcmVieSBleHRlbmRpbmcgaXRzIHNoZWxmIGxpZmUuXFxuXFxuKGYpIENoZW1pY2FsIGNoYW5nZXM6IFRoaXMgbWF5IGJlIHNvbWV3aGF0IGNvcnJlY3QgaW4gdGVybXMgb2YgZ2VuZXJhbCBjaGVtaXN0cnksIGJ1dCBpdCBkb2Vzbid0IGZ1bGx5IGV4cGxhaW4gdGhlIHB1cnBvc2Ugb3IgdGhlIHJlc3VsdCBvZiBmb29kIGlycmFkaWF0aW9uLiBUaGUgdGVybSAnY2hlbWljYWwgY2hhbmdlcycgaXMgdG9vIGJyb2FkIGFuZCBkb2Vzbid0IGNhcHR1cmUgdGhlIHNwZWNpZmljIGVmZmVjdCBcXHUyMDE0IHJlZHVjaW5nIHRoZSBwb3B1bGF0aW9uIG9mIGhhcm1mdWwgcGF0aG9nZW5zLlxcblxcbihnKSBHZXQgY2hlbWljYWwgcmVhY3Rpb25zIHN0YXJ0ZWQ6IFNpbWlsYXIgdG8gKGYpLCB3aGlsZSB0aGlzIG1pZ2h0IG9jY3VyIGFzIGEgc2lkZSBlZmZlY3Qgb2YgaXJyYWRpYXRpb24gKHNpbmNlIGl0IGNhdXNlcyBpb25pemF0aW9uKSwgaXQncyBub3Qgd2hhdCBmb29kIGlycmFkaWF0aW9uIGlzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBvciB3aHkgaXQncyBkb25lLlxcblxcbihoKSBNYWpvciB0aHJlYXQgdG8gaGVhbHRoOiBUaGlzIGlzIGluY29ycmVjdC4gSXJyYWRpYXRpbmcgZm9vZCB0byBzcGVjaWZpYyBsZXZlbHMgaXMgY29uc2lkZXJlZCBzYWZlIGJ5IG51bWVyb3VzIGludGVybmF0aW9uYWwgaGVhbHRoIG9yZ2FuaXphdGlvbnMuIFRoaXMgb3B0aW9uIG1pc3JlcHJlc2VudHMgdGhlIHB1cnBvc2UgYW5kIHNhZmV0eSBzdGFuZGFyZHMgb2YgZm9vZCBpcnJhZGlhdGlvbi5cXG5cXG5UbyBzdW1tYXJpemUsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGlycmFkaWF0aW5nIGZvb2QgaXMgdG8gaW1wcm92ZSBmb29kIHNhZmV0eSBieSByZWR1Y2luZyBoYXJtZnVsIG1pY3Jvb3JnYW5pc21zLCBtYWtpbmcgdGhlIGZvb2QgbGVzcyBsaWtlbHkgdG8gY2F1c2UgZm9vZGJvcm5lIGlsbG5lc3Nlcy5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJjXCJ9In1dLCAiMiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgcHJvdGVjdHMgYSBtYW1tYWwncyBza2luP1xuQW5zd2VyIENob2ljZXM6IChhKSBGaWJlciBmb2xsaWNsZXMgKGIpIEV4Zm9saWF0aW9uIChjKSBSZXNpc3RhbmNlIChkKSBMYXllcnMgb2YgZmF0IChlKSBFdmFwb3JhdGlvbiAoZikgQSBjdXRpY2xlIChnKSBTZW5zb3J5IG5ldXJvbnMgKGgpIEZ1ciBhbmQgZmF0In0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIoYSkgKipGaWJlciBmb2xsaWNsZXMqKjogVGhpcyBpcyB0aGUgY29ycmVjdCBhbnN3ZXIuIE1hbW1hbHMgaGF2ZSBhIHVuaXF1ZSBza2luIHN0cnVjdHVyZSB0aGF0IGluY2x1ZGVzIG11bHRpcGxlIGxheWVycywgb25lIG9mIHdoaWNoIGludm9sdmVzIGEgbmV0d29yayBvZiBmaWJlciBmb2xsaWNsZXMuIFRoZXNlIGFyZSBzbWFsbCBwb2NrZXRzIHdpdGhpbiB0aGUgc2tpbiB0aGF0IGNvbnRhaW4gaGFpciBmb2xsaWNsZXMsIHNlYmFjZW91cyBnbGFuZHMsIGFuZCBzd2VhdCBnbGFuZHMuIFRoZSBsYXllciBvZiBoYWlyICh3aGljaCBjb25zaXN0cyBvZiBmaWJlcnMpIGFuZCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzIHdvcmsgdG9nZXRoZXIgdG8gcHJvdGVjdCB0aGUgbWFtbWFsJ3Mgc2tpbiBmcm9tIHZhcmlvdXMgZW52aXJvbm1lbnRhbCB0aHJlYXRzIHN1Y2ggYXMgbWljcm9vcmdhbmlzbXMsIHBoeXNpY2FsIGRhbWFnZSwgYW5kIGV4Y2Vzc2l2ZSBoZWF0IG9yIGNvbGQuXFxuXFxuTm93IGxldCdzIGRpc21pc3MgdGhlIGluY29ycmVjdCBvcHRpb25zOlxcblxcbihiKSAqKkV4Zm9saWF0aW9uKio6IEV4Zm9saWF0aW9uIHJlZmVycyB0byB0aGUgbmF0dXJhbCBwcm9jZXNzIG9mIGRlYWQgc2tpbiBjZWxscyBkeWluZyBhbmQgc2hlZGRpbmcgb2ZmLiBXaGlsZSBpdCBjb250cmlidXRlcyB0byBoZWFsdGggYW5kIHNraW4gYXBwZWFyYW5jZSwgaXQgZG9lcyBub3QgZGlyZWN0bHkgcHJvdGVjdCB0aGUgc2tpbi5cXG5cXG4oYykgKipSZXNpc3RhbmNlKio6IFRoaXMgdGVybSBpcyB0b28gYnJvYWQgYW5kIHZhZ3VlIHRvIGFjY3VyYXRlbHkgZGVzY3JpYmUgd2hhdCBwcm90ZWN0cyBhIG1hbW1hbCdzIHNraW4uIE1hbW1hbCBza2luIHJlc2lzdGFuY2UgaXMgYSByZXN1bHQgb2YgaXRzIHN0cnVjdHVyZSwgbm90IHRoZSB0ZXJtIGl0c2VsZi5cXG5cXG4oZCkgKipMYXllcnMgb2YgZmF0Kio6IE1hbW1hbHMgY2VydGFpbmx5IGhhdmUgbGF5ZXJzIG9mIGZhdCwgZXNwZWNpYWxseSB1bmRlciB0aGUgc2tpbiAoc3ViY3V0YW5lb3VzIGZhdCkuIFRoaXMgbGF5ZXIgYWN0cyBhcyBpbnN1bGF0aW9uIGFnYWluc3QgY29sZCB0ZW1wZXJhdHVyZXMgYW5kIGFzIGFuIGVuZXJneSByZXNlcnZlLCBidXQgaXQgaXMgbm90IHdoYXQgcHJpbWFyaWx5IHByb3RlY3RzIHNraW4gaW4gdGhlIHdheSBoYWlyIGRvZXMuXFxuXFxuKGUpICoqRXZhcG9yYXRpb24qKjogRXZhcG9yYXRpb24gb2Ygc3dlYXQgY2FuIGNvb2wgdGhlIGJvZHkgYW5kIGlzIGEgcmVndWxhdG9yeSBtZWNoYW5pc20gZm9yIG1hbW1hbHMsIGJ1dCBpdCBkb2Vzbid0IG9mZmVyIHBoeXNpY2FsIHByb3RlY3Rpb24gdG8gdGhlIHNraW4uXFxuXFxuKGYpICoqQSBjdXRpY2xlKio6IFRoZSBjdXRpY2xlIHJlZmVycyB0byB0aGUgb3V0ZXIgcGFydCBvZiBhIHBsYW50IGNlbGwgd2FsbCBvciwgbG9vc2VseSwgdGhlIG91dGVyIHBhcnQgb2YgdGhlIHNraW4gYXMgaW4gaHVtYW4gaGFpciB3aGljaCBpcyB3aGF0IHByb3RlY3RzIHRoYXQgaGFpciBmb2xsaWNsZS4gVGhpcyBkb2Vzbid0IGFjY3VyYXRlbHkgZGVzY3JpYmUgdGhlIHByb3RlY3RpdmUgbGF5ZXIgb2YgbWFtbWFsIHNraW4uXFxuXFxuKGcpICoqU2Vuc29yeSBuZXVyb25zKio6IFRoZXNlIGFyZSBzcGVjaWFsaXplZCBuZXJ2ZSBjZWxscyB0aGF0IGRldGVjdCBhbmQgdHJhbnNtaXQgc2Vuc29yeSBpbmZvcm1hdGlvbiB0byB0aGUgY2VudHJhbCBuZXJ2b3VzIHN5c3RlbS4gU2Vuc29yeSBuZXVyb25zIHBsYXkgYSByb2xlIGluIHBlcmNlaXZpbmcgdGhlIGVudmlyb25tZW50IGJ1dCBhcmUgbm90IHBoeXNpY2FsIGJhcnJpZXJzIHRoYXQgcHJvdGVjdCB0aGUgc2tpbi5cXG5cXG4oaCkgKipGdXIgYW5kIGZhdCoqOiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgY29ycmVjdCBhbmQgaW5jb3JyZWN0IGVsZW1lbnRzLiBXaGlsZSBmdXIgZG9lcyBwcm92aWRlIHByb3RlY3Rpb24gYXMgcGFydCBvZiB0aGUgZm9sbGljbGUgbmV0d29yaywgJ2ZhdCcgYWxvbmUgaXMgbm90IGEgcHJvdGVjdGl2ZSBzdHJ1Y3R1cmUgaW4gdGhlIHNraW4gaXRzZWxmLiBBZGRpdGlvbmFsbHksIHNwZWNpZnlpbmcgZnVyIGFuZCBmYXQgdG9nZXRoZXIgbWl4ZXMgdHdvIGRpZmZlcmVudCBmdW5jdGlvbmFsaXRpZXMgKGZ1ciBmb3IgaW5zdWxhdGlvbiBhbmQgcHJvdGVjdGlvbiwgZmF0IGZvciBpbnN1bGF0aW9uKSByYXRoZXIgdGhhbiBvbmUgc2luZ3VsYXIgbWVjaGFuaXNtIGRpcmVjdGx5IGFkZHJlc3Npbmcgc2tpbiBwcm90ZWN0aW9uLlxcblxcbkluIHN1bW1hcnksIG1hbW1hbHMnIHNraW4gaXMgcm9idXN0bHkgcHJvdGVjdGVkIHByaW1hcmlseSBieSB0aGUgbmV0d29yayBvZiBmaWJlciBmb2xsaWNsZXMsIHdoaWNoIGluY29ycG9yYXRlcyBib3RoIHRoZSBoYWlyIHN0cnVjdHVyZXMgKGZ1cikgYW5kIHRoZSBhc3NvY2lhdGVkIGdsYW5kcyAobGlrZSBzZWJhY2VvdXMgZ2xhbmRzKSB0aGF0IGx1YnJpY2F0ZSB0aGUgZnVyLiBUaGlzIHByb3RlY3RzIHRoZSB1bmRlcmx5aW5nIGxheWVycyBvZiB0aGUgc2tpbiBhbmQgcGVybWl0cyBtYW1tYWxzIHRvIHRocml2ZSBpbiB2YXJpb3VzIGNsaW1hdGVzIGFuZCBlbnZpcm9ubWVudHMuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiYVwifSJ9XSwgIjMiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGRvIGVhcnRod29ybXMgZG8gd2hlbiBhIHNlZ21lbnQgYnJlYWtzIG9mZj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgRGllcyAoYikgUmVncm93cyBpdCAoYykgUmVwcm9kdWNlcyAoZCkgU2VkaW1lbnQgKGUpIFJvb3QgZ3Jvd3RoIChmKSBNaWdyYXRlIChnKSBTdG9wcyBncm93aW5nIChoKSBSb290cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiMS4gKipPcHRpb24gKGEpOiBEaWVzKipcXG4gICAtIEVhcnRod29ybXMgYXJlIHNlZ21lbnRlZCBvcmdhbmlzbXMsIHdpdGggZWFjaCBzZWdtZW50IGNvbnRhaW5pbmcgYm90aCBuZXJ2ZSBjb3JkcyBhbmQgbXVzY2xlIGZpYmVycy4gV2hpbGUgaXQgaXMgdHJ1ZSB0aGF0IGVhY2ggc2VnbWVudCBjYW4gZnVuY3Rpb24gc2VtaS1pbmRlcGVuZGVudGx5LCB0aGUgc2V2ZXJlZCBzZWdtZW50IGRvZXNuJ3Qgc2ltcGx5IGRpZS4gVGhlIGxvc3Mgb2YgYSBzZWdtZW50IG1heSBhZmZlY3QgdGhlIHdvcm0ncyBtb2JpbGl0eSBhbmQgb3ZlcmFsbCBoZWFsdGgsIGJ1dCBpdCBkb2Vzbid0IGxlYWQgdG8gaW5zdGFudGFuZW91cyBkZWF0aCBvZiB0aGUgc2VnbWVudCBpdHNlbGYuXFxuXFxuMi4gKipPcHRpb24gKGMpOiBSZXByb2R1Y2VzKipcXG4gICAtIFJlcHJvZHVjdGlvbiBpbiBlYXJ0aHdvcm1zIGlzIGEgc2VwYXJhdGUgYmlvbG9naWNhbCBwcm9jZXNzIHRoYXQgaW52b2x2ZXMgdGhlIGZvcm1hdGlvbiBvZiBlaXRoZXIgZWdncyBvciB3b3JtcyBmcm9tIGhlcm1hcGhyb2RpdGljIHBhcnRuZXJzLiBUaGUgYnJlYWtpbmcgb2ZmIG9mIGEgc2VnbWVudCBkb2VzIG5vdCBpbml0aWF0ZSB0aGlzIHJlcHJvZHVjdGl2ZSBwcm9jZXNzLlxcblxcbjMuICoqT3B0aW9uIChkKTogU2VkaW1lbnQqKlxcbiAgIC0gU2VkaW1lbnQgcmVmZXJzIHRvIGZpbmUsIGxvb3NlIHBhcnRpY2xlcyBvZiBvcmdhbmljIGFuZCBpbm9yZ2FuaWMgbWF0ZXJpYWwgZm91bmQgYXQgdGhlIGJvdHRvbSBvZiBhIGJvZHkgb2Ygd2F0ZXIuIFRoZXJlIGlzIG5vIGZhY3R1YWwgY29ubmVjdGlvbiBiZXR3ZWVuIGEgc2VnbWVudGVkIGVhcnRod29ybSBicmVha2luZyBvZmYgYW5kIHRoZSBjcmVhdGlvbiBvZiBzZWRpbWVudC5cXG5cXG40LiAqKk9wdGlvbiAoZSk6IFJvb3QgZ3Jvd3RoKipcXG4gICAtIFJvb3QgZ3Jvd3RoIGlzIGEgcHJvY2VzcyBpbiBwbGFudHMsIG5vdCBlYXJ0aHdvcm1zLiBFYXJ0aHdvcm1zIGRvIG5vdCBoYXZlIHJvb3RzIG5vciBkbyB0aGV5IHBlcmZvcm0gcm9vdCBncm93dGggYXMgcGFydCBvZiB0aGVpciBiaW9sb2dpY2FsIGZ1bmN0aW9ucy5cXG5cXG41LiAqKk9wdGlvbiAoZik6IE1pZ3JhdGUqKlxcbiAgIC0gTWlncmF0aW9uIHJlZmVycyB0byB0aGUgcmVndWxhciBzZWFzb25hbCBtb3ZlbWVudHMgbWFkZSBieSBhbmltYWxzIGluIHNlYXJjaCBvZiBmb29kLCBicmVlZGluZywgb3IgbWlsZGVyIGNsaW1hdGljIGNvbmRpdGlvbnMuIEVhcnRod29ybXMgY2FuIG1pZ3JhdGUsIGJ1dCB0aGUgYnJlYWtpbmcgb2ZmIG9mIGEgc2VnbWVudCAod2hpY2ggdHlwaWNhbGx5IGhhcHBlbnMgZHVlIHRvIGV4dGVybmFsIHByZXNzdXJlKSBkb2VzIG5vdCBpbml0aWF0ZSBhIG1pZ3JhdGlvbiBwcm9jZXNzLlxcblxcbjYuICoqT3B0aW9uIChnKTogU3RvcHMgZ3Jvd2luZyoqXFxuICAgLSBHcm93dGggaW4gZWFydGh3b3JtcyBpcyBpbmRlZWQgYmlvbG9naWNhbCwgYnV0IHRoZSBsb3NzIG9mIGEgc2VnbWVudCBkb2Vzbid0IGNhdXNlIGEgY2Vzc2F0aW9uIG9mIGdyb3d0aC4gU2VnbWVudHMgb2YgZWFydGh3b3JtcyBhcmUgY29uc3RhbnRseSBiZWluZyBhZGRlZCBhbmQgc2hlZCBkZXBlbmRpbmcgb24gdGhlIHdvcm0ncyBncm93dGggYW5kIGNvbmRpdGlvbnMsIHNvIHRoZSBsb3NzIG9mIGEgc2VnbWVudCB3b3VsZG4ndCB0eXBpY2FsbHkgaGFsdCBpdHMgb3ZlcmFsbCBncm93dGguXFxuXFxuNy4gKipPcHRpb24gKGgpOiBSb290cyoqXFxuICAgLSBBcyBtZW50aW9uZWQgZWFybGllciwgcm9vdHMgYXJlIGEgY2hhcmFjdGVyaXN0aWMgb2YgcGxhbnRzLCBub3QgZWFydGh3b3Jtcy4gRWFydGh3b3JtIHNlZ21lbnRzIGRvIG5vdCB0dXJuIGludG8gcm9vdHMuXFxuXFxuKipUaGUgY29ycmVjdCBhbnN3ZXIgaXMgKGIpIFJlZ3Jvd3MgaXQuKipcXG5cXG5FYXJ0aHdvcm1zIGNhbiByZWdlbmVyYXRlIGxvc3Qgc2VnbWVudHMuIFRoaXMgcmVnZW5lcmF0aXZlIGFiaWxpdHkgaXMgb25lIG9mIHRoZSB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZXNlIHNlZ21lbnRlZCB3b3Jtcy4gV2hlbiBhIHNlZ21lbnQgYnJlYWtzIG9mZiwgdHlwaWNhbGx5IGR1ZSB0byBleHRlcm5hbCBmb3JjZXMsIHRoZSBzZXZlcmVkIHNlZ21lbnQgY2FuIHJlZ2VuZXJhdGUsIGxlYWRpbmcgdG8gdGhlIGdyb3d0aCBvZiBhIG5ldyBvbmUgaWYgdGhlIGNvbmRpdGlvbnMgcGVybWl0LlxcblxcblJlbWVtYmVyLCBlYWNoIGluY29ycmVjdCBhbnN3ZXIgaXMgbm90IGNvcnJlY3QgYmVjYXVzZSB0aGV5IGVpdGhlciBkb24ndCBhZGRyZXNzIHRoZSBiaW9sb2dpY2FsIHByb2Nlc3MgYXQgaGFuZCBvciBkb24ndCBhbGlnbiB3aXRoIGtub3duIGJpb2xvZ2ljYWwgZnVuY3Rpb25zIGFuZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgZWFydGh3b3Jtcy5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJiXCJ9In1dLCAiNCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IExpZ2h0bmluZyBjYW4gYmUgYmFkIGZvciB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBUaGUgZW52aXJvbm1lbnQgKGIpIFJhaW5zdG9ybXMgKGMpIERlc3RydWN0aW9uIChkKSBWaXNpYmlsaXR5IChlKSBUaHVuZGVyIChmKSBUaGUgc3VuIChnKSBUaGUgd2VhdGhlci4gKGgpIFRyYW5zcG9ydGF0aW9uIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIoYSkgVGhlIGVudmlyb25tZW50OiBMaWdodG5pbmcgY2FuIHJlbGVhc2UgbGFyZ2UgYW1vdW50cyBvZiBlbmVyZ3kgYW5kIGhlYXQsIHdoaWNoIGNhbiBkaXNydXB0IG5hdHVyYWwgZWNvc3lzdGVtcywgY2F1c2UgZm9yZXN0IGZpcmVzLCBhbmQgYWZmZWN0IGFpciBxdWFsaXR5LCB0aHVzIGhhcm1pbmcgdGhlIGVudmlyb25tZW50LlxcblxcbihiKSBSYWluc3Rvcm1zOiBMaWdodG5pbmcgZG9lcyBub3QgZGlyZWN0bHkgaGFybSByYWluc3Rvcm1zLiBJbiBmYWN0LCBpdCdzIGEgcGFydCBvZiB0aGUgbmF0dXJhbCBzdG9ybSBwcm9jZXNzLiBMaWdodG5pbmcgaXMgb2Z0ZW4gYSByZXN1bHQgb2Ygc2V2ZXJlIHRodW5kZXJzdG9ybXMsIG5vdCBhIGZhY3RvciB0aGF0IGNhdXNlcyB0aGVtIHRvIGJlIGhhcm1mdWwgdGhlbXNlbHZlcy5cXG5cXG4oYykgRGVzdHJ1Y3Rpb246IFRoaXMgb3B0aW9uIGlzIGxlc3Mgc3BlY2lmaWMgdGhhbiAoYSkgb3IgKGIpLCBidXQgaW4gZ2VuZXJhbCB0ZXJtcywgaXQncyB0cnVlLiBIb3dldmVyLCAnZGVzdHJ1Y3Rpb24nIGlzIHRvbyB2YWd1ZSBhbmQgZG9lc24ndCBleHBsYWluIHRoZSBoYXJtIGNhdXNlZCBieSBsaWdodG5pbmcgYWN0aXZpdHkuXFxuXFxuKGQpIFZpc2liaWxpdHk6IFdoaWxlIGxpZ2h0bmluZyBjYW4gdGVtcG9yYXJpbHkgcmVkdWNlIHZpc2liaWxpdHkgZHVyaW5nIHN0b3JtcywgaXQgZG9lcyBub3QgaW5oZXJlbnRseSAnYnJpbmcnIG9yICdjYXVzZScgcG9vciB2aXNpYmlsaXR5LiBWaXNpYmlsaXR5IGlzc3VlcyBhcmUgZ2VuZXJhbGx5IGR1ZSB0byByYWluLCBmb2csIG9yIHRoZSBzdG9ybSBjbG91ZHMgdGhlbXNlbHZlcywgbm90IHRoZSBsaWdodG5pbmcuXFxuXFxuKGUpIFRodW5kZXI6IFRoaXMgaXMgbm90IGEgaGFybSBidXQgcmF0aGVyIGFub3RoZXIgcGhlbm9tZW5vbiBjcmVhdGVkIGFsb25nc2lkZSBsaWdodG5pbmc7IHRoZXkgYXJlIGJvdGggbWFuaWZlc3RhdGlvbnMgb2YgZWxlY3RyaWNhbCBkaXNjaGFyZ2VzIGluIHRodW5kZXJzdG9ybXMuXFxuXFxuKGYpIFRoZSBzdW46IExpZ2h0bmluZyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBzdW4sIGFzIHRoZXkgYXJlIGRpc3RhbnQgZnJvbSBlYWNoIG90aGVyIGFuZCBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2YgZWFjaCBvdGhlci5cXG5cXG4oZykgVGhlIHdlYXRoZXI6IFdoaWxlIGxpZ2h0bmluZyBpcyBhIHBhcnQgb2Ygc2V2ZXJlIHdlYXRoZXIsIGl0IGRvZXMgbm90IGNhdXNlIHdlYXRoZXIgY2hhbmdlcyBpbmhlcmVudGx5LiBXZWF0aGVyIGlzIGEgY29tcGxleCBzeXN0ZW0gaW5mbHVlbmNlZCBieSBtYW55IGZhY3RvcnMsIGFuZCBsaWdodG5pbmcgaXMgb25seSBvbmUgb2YgbWFueSBpbmRpY2F0b3JzIG9mIHNldmVyZSB3ZWF0aGVyLlxcblxcbihoKSBUcmFuc3BvcnRhdGlvbjogVGhpcyBpcyBhbm90aGVyIHBvdGVudGlhbCBlZmZlY3QsIGJ1dCBpdCBpcyBpbmRpcmVjdC4gTGlnaHRuaW5nIHN0cmlrZXMgY2FuIGNhdXNlIGRhbWFnZSB0byBpbmZyYXN0cnVjdHVyZSBsaWtlIHBvd2VyIGxpbmVzLCByb2FkcywgcmFpbHJvYWRzLCBldGMuLCBpbmRpcmVjdGx5IGFmZmVjdGluZyB0cmFuc3BvcnRhdGlvbiBzeXN0ZW1zLiBIb3dldmVyLCB0aGlzIHN0YXRlbWVudCBpc24ndCBhcyBkaXJlY3Qgb3IgY2xlYXIgYXMgaXQgY291bGQgYmUuXFxuXFxuQWZ0ZXIgZ29pbmcgdGhyb3VnaCBlYWNoIGFuc3dlciBjaG9pY2UsIGl0J3MgY2xlYXIgdGhhdCAoYSkgJ1RoZSBlbnZpcm9ubWVudCcgaXMgdGhlIG1vc3QgZGlyZWN0IGFuZCBjb21wcmVoZW5zaXZlIGFuc3dlciB0byB3aHkgbGlnaHRuaW5nIGNhbiBiZSBiYWQgd2l0aG91dCBmYWxsaW5nIGludG8gYnJvYWQgb3IgaW5kaXJlY3QgZXhwbGFuYXRpb25zLlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICI1IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogRXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbiBzaG93IHRoYXQgd2hhdCB1c2VkIHRvIGxpdmUgaW4gYSBwbGFjZT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU291bHMgKGIpIEFuaW1hbHMgd2l0aCBiYWNrYm9uZXMgKGMpIE9yZ2FuaXNtcyAoZCkgUGxhbnQgb3IgYW5pbWFsIChlKSBNYWxlcyBhbmQgZmVtYWxlcyAoZikgRGVmb3Jlc3RhdGlvbiAoZykgUmVpbmNhcm5hdGlvbiAoaCkgSW1wb3J0YW50IGhhYml0YXRzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIoYSkgU291bHM6IEV2aWRlbmNlIG9mIHBhc3QgbGlmZSBpbiBiaW9sb2d5IHR5cGljYWxseSByZWZlcnMgdG8gcGh5c2ljYWwgb3IgbW9sZWN1bGFyIHJlbWFpbnMsIG5vdCBhYnN0cmFjdCBjb25jZXB0cyBsaWtlIHNvdWxzLiBCaW9sb2d5IGRlYWxzIHdpdGggcGh5c2ljYWwsIHRhbmdpYmxlIGFzcGVjdHMgb2YgbGlmZSBmb3Jtcy5cXG5cXG4oYikgQW5pbWFscyB3aXRoIGJhY2tib25lczogVGhpcyBvcHRpb24gaXMgdG9vIHNwZWNpZmljLiBXaGlsZSBldmlkZW5jZSBjb3VsZCBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2YgYW5pbWFscyB3aXRoIGJhY2tib25lcywgaXQgZG9lc24ndCBhY2NvdW50IGZvciBvdGhlciBmb3JtcyBvZiBsaWZlIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgZm9zc2lsIHJlY29yZC5cXG5cXG4oYykgT3JnYW5pc21zOiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIHRoZSBjb3JyZWN0IGFuc3dlciwgYnV0IGl0J3Mgbm90IHRoZSBtb3N0IHNwZWNpZmljLiBGb3NzaWxzIG9yIGNoZW1pY2FsIG1hcmtlcnMgY2FuIGluZGVlZCBzaG93IHdoZXJlIHZhcmlvdXMgb3JnYW5pc21zIG9uY2UgbGl2ZWQsIGJ1dCBub3QgYWxsIHBhc3QgbGlmZSBpcyByZXByZXNlbnRlZCBieSBkaXJlY3QgZm9zc2lsIGV2aWRlbmNlLlxcblxcbihmKSBEZWZvcmVzdGF0aW9uOiBUaGlzIHJlZmVycyB0byBhIGN1cnJlbnQgZW52aXJvbm1lbnRhbCBwcm9jZXNzLCBub3QgcGFzdCBsaWZlLiBJdCBpbmRpY2F0ZXMgY2hhbmdlcyBpbiBlY29zeXN0ZW1zIHdpdGhpbiB0aGUgcmVjZW50IHBhc3QgYnV0IGRvZXNuJ3Qgc3BlY2lmaWNhbGx5IGFkZHJlc3Mgd2hpY2ggbGlmZSBmb3JtcyBleGlzdGVkIHRoZXJlIGluIHRoZSBwYXN0LlxcblxcbihnKSBSZWluY2FybmF0aW9uOiBMaWtlICdzb3VscywnIHRoaXMgaXMgYSBzcGlyaXR1YWwgb3IgbWV0YXBoeXNpY2FsIGNvbmNlcHQsIG5vdCBncm91bmRlZCBpbiBiaW9sb2dpY2FsIGV2aWRlbmNlLiBCaW9sb2d5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIG9ic2VydmFibGUgYW5kIHNjaWVudGlmaWNhbGx5IHRlc3RhYmxlIHBoZW5vbWVuYS5cXG5cXG4oaCkgSW1wb3J0YW50IGhhYml0YXRzOiBUaGlzIGlzIHRvbyB2YWd1ZS4gV2hpbGUgaXQgY291bGQgYmUgdGllZCB0byB0aGUgdHlwZXMgb2Ygb3JnYW5pc21zIHRoYXQgdXNlZCB0byBsaXZlIGluIGEgcGxhY2UsIHRoZSBwaHJhc2UgY291bGQgaW1wbHkgYSB2YXJpZXR5IG9mIHVucmVsYXRlZCBjb250ZXh0cywgYW5kIGRvZXNuJ3QgZGlyZWN0bHkgc3RhdGUgd2hhdCB0eXBlcyBvZiBsaWZlIGV4aXN0ZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGUgbW9zdCBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBhbnN3ZXIgaXMgKGQpIFBsYW50IG9yIGFuaW1hbC4gRXZpZGVuY2UgaW4gdGhlIGZvcm0gb2YgZm9zc2lscywgdHJhY2UgZm9zc2lscywgYW5kIGltcHJpbnRzIGNhbiBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2YgdmFyaW91cyBsaWZlIGZvcm1zLCBpbmNsdWRpbmcgYm90aCBwbGFudHMgYW5kIGFuaW1hbHMsIGluIGEgcGFydGljdWxhciBwbGFjZSB3aGVyZSB0aGV5IG9uY2UgbGl2ZWQuIFRoaXMgY292ZXJzIGEgYnJvYWQgcmFuZ2Ugb2YgcGFzdCBsaWZlIGluIGEgc2NpZW50aWZpY2FsbHkgZ3JvdW5kZWQgbWFubmVyLCBhY2tub3dsZWRnaW5nIGNvbnRyaWJ1dGlvbnMgZnJvbSBib3RoIHBsYW50IGFuZCBhbmltYWwga2luZ2RvbXMuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZFwifSJ9XSwgIjYiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBIb3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93biwgb3IgaW5oZXJpdGVkLCBpcyBmb3VuZCBpbiBpbmZvcm1hdGlvbiBpbiBhbiBvcmdhbmlzbSdzIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNwZWNpZXMgKGIpIE1lc3NlbmdlcnMgKGMpIEhhaXIgZm9sbGljbGVzIChkKSBDeWNsZXMgKGUpIFNraW4gY2VsbHMgKGYpIEVuZG9jcmluZSBzeXN0ZW0gKGcpIENocm9tb3NvbWVzIChoKSBQcm90ZWlucyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiVGhlIGNvcnJlY3QgYW5zd2VyIGlzIChnKSBDaHJvbW9zb21lcy5cXG5cXG5MZXQncyBleGFtaW5lIHdoeSB0aGUgb3RoZXIgb3B0aW9ucyBhcmUgaW5jb3JyZWN0OlxcblxcbihhKSBTcGVjaWVzOiBTcGVjaWVzIGlzIGEgY2xhc3NpZmljYXRpb24gc3lzdGVtIHVzZWQgYnkgYmlvbG9naXN0cyB0byBncm91cCB0b2dldGhlciBzaW1pbGFyIG9yZ2FuaXNtcy4gV2hpbGUgc3BlY2llcyBhcmUgcmVsYXRlZCBpbiB0ZXJtcyBvZiB0aGVpciBnZW5ldGljcywgdGhleSBkbyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5kaXZpZHVhbCdzIGluaGVyaXRlZCB0cmFpdHMuXFxuXFxuKGIpIE1lc3NlbmdlcnM6IFRoaXMgb3B0aW9uIGNvdWxkIHJlZmVyIHRvIHNpZ25hbHMgb3IgY29tbXVuaWNhdGlvbiBzeXN0ZW1zIHdpdGhpbiBhbiBvcmdhbmlzbSwgYnV0IGl0IGRvZXMgbm90IHR5cGljYWxseSByZWxhdGUgdG8gdGhlIGdlbmV0aWMgaW5mb3JtYXRpb24gcmVzcG9uc2libGUgZm9yIGluaGVyaXRlZCB0cmFpdHMuIFxcblxcbihjKSBIYWlyIGZvbGxpY2xlczogSGFpciBmb2xsaWNsZXMgYXJlIHN0cnVjdHVyZXMgaW4gdGhlIHNraW4gdGhhdCBwcm9kdWNlIGhhaXIuIFRoZXkgZG9uJ3QgY29udGFpbiBnZW5ldGljIGluZm9ybWF0aW9uIGFib3V0IHRyYWl0czsgcmF0aGVyLCB0aGV5J3JlIGEgcmVzdWx0IG9mIGdlbmV0aWMgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5jb2RlZCBpbiB0aGUgY2hyb21vc29tZXMuXFxuXFxuKGQpIEN5Y2xlczogQmlvbG9naWNhbCBjeWNsZXMsIHN1Y2ggYXMgY2lyY2FkaWFuIHJoeXRobXMsIGFyZSByZWd1bGFyIHBhdHRlcm5zIG9mIGJlaGF2aW9yIG9yIHBoeXNpb2xvZ2ljYWwgY2hhbmdlLiBUaGV5IGFyZSByZWd1bGF0ZWQgYnkgaW50ZXJuYWwgYW5kIGV4dGVybmFsIHN0aW11bGksIGJ1dCB0aGV5IGRvbid0IHN0b3JlIGdlbmV0aWMgaW5mb3JtYXRpb24uXFxuXFxuKGUpIFNraW4gY2VsbHM6IFNraW4gY2VsbHMgYXJlIHNvbWF0aWMgY2VsbHMgdGhhdCBjb25zdGl0dXRlIHRoZSBvdXRlciBsYXllciBvZiB0aGUgc2tpbi4gVGhleSBjb250YWluIGdlbmV0aWMgbWF0ZXJpYWwsIGJ1dCB0aGV5IGRvIG5vdCBob2xkIHRoZSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZm9yIGhvdyB0cmFpdHMgd2lsbCBiZSBleHByZXNzZWQgLSB0aGF0IGluZm9ybWF0aW9uIGlzIGZvdW5kIGluIHRoZSBETkEsIG5vdGFibHkgd2l0aGluIGNocm9tb3NvbWVzLlxcblxcbihmKSBFbmRvY3JpbmUgc3lzdGVtOiBUaGUgZW5kb2NyaW5lIHN5c3RlbSBpcyBhIGdyb3VwIG9mIGdsYW5kcyB0aGF0IHNlY3JldGUgaG9ybW9uZXMsIHdoaWNoIHJlZ3VsYXRlIHZhcmlvdXMgZnVuY3Rpb25zIGluIHRoZSBib2R5LiBJdCBjb250cm9scyBtYW55IGFzcGVjdHMgb2Ygb3VyIGJvZHkgZnVuY3Rpb25zIGJ1dCBkb2Vzbid0IHN0b3JlIGdlbmV0aWMgaW5mb3JtYXRpb24uXFxuXFxuKGgpIFByb3RlaW5zOiBQcm90ZWlucyBhcmUgZXNzZW50aWFsIG1vbGVjdWxlcyB0aGF0IHBsYXkgbWFueSByb2xlcyBpbiB0aGUgYm9keSwgaW5jbHVkaW5nIGFjdGluZyBhcyBlbnp5bWVzLCBzdHJ1Y3R1cmFsIGNvbXBvbmVudHMsIGFuZCBzaWduYWxpbmcgbW9sZWN1bGVzLiBUaGV5J3JlIGNyZWF0ZWQgYmFzZWQgb24gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIEROQSBidXQgZG8gbm90IGNvbnRhaW4gdGhlIGdlbmV0aWMgaW5mb3JtYXRpb24gaXRzZWxmLlxcblxcbkluIHN1bW1hcnksIGNocm9tb3NvbWVzIGFyZSB0aGUgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGNlbGwgbnVjbGV1cyB0aGF0IGNhcnJ5IHRoZSBnZW5ldGljIG1hdGVyaWFsIChETkEpLCB3aGljaCBpbmNsdWRlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYW4gb3JnYW5pc20ncyB0cmFpdHMuIFRoZSBvdGhlciBvcHRpb25zIGFyZSBpbmNvcnJlY3QgYmVjYXVzZSB0aGV5IHJlZmVyIHRvIGVudGl0aWVzLCBwcm9jZXNzZXMsIG9yIG1lY2hhbmlzbXMgdGhhdCBkbyBub3Qgc3RvcmUgb3IgZGlyZWN0bHkgY29udGFpbiB0aGUgZ2VuZXRpYyBpbmZvcm1hdGlvbiB0aGF0IGRldGVybWluZXMgaW5oZXJpdGVkIHRyYWl0cy5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJnXCJ9In1dLCAiNyI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgYXJlIHRoZSBtYWpvciBwcm9kdWNlcnMgaW4gdGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEdyYXNzIChiKSBBbmltYWxzIChjKSBBcHBsZXMgKGQpIFBvdGF0b2VzIChlKSBUcmVlcyAoZikgUGxhbnRzIChnKSBGdW5naSAoaCkgRmllbGRzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIxLiAqKkdyYXNzIChhKSoqIC0gV2hpbGUgZ3Jhc3MgaXMgaW5kZWVkIGEgcHJvZHVjZXIsIG9yIGF1dG90cm9waGljIG9yZ2FuaXNtLCBpbiB0aGUgYmlvbG9naWNhbCBzZW5zZSwgaXQgaXNuJ3QgdHlwaWNhbGx5IGVtcGhhc2l6ZWQgYXMgYSBtYWpvciBwcm9kdWNlciBpbiB0aGUgY29udGV4dCBvZiB0aGUgcXVlc3Rpb24gYmVjYXVzZSBpdCBpcyBtb3JlIGNvbW1vbiBhbmQgbGVzcyB2YXJpZWQgdGhhbiBvdGhlciBwbGFudCBmb3Jtcy5cXG5cXG4yLiAqKkFuaW1hbHMgKGIpKiogLSBBbmltYWxzIGFyZSBjb25zdW1lcnMgKGhldGVyb3Ryb3BocykgdGhhdCBjYW5ub3QgcHJvZHVjZSB0aGVpciBvd24gZm9vZCwgc28gdGhleSBhcmUgbm90IHByb2R1Y2Vycy5cXG5cXG4zLiAqKkFwcGxlcyAoYykqKiAtIExpa2UgZ3Jhc3MsIGFwcGxlcyBhcmUgYSB0eXBlIG9mIHBsYW50IHByb2R1Y3QsIGJ1dCB0aGV5IGFyZSBkZXJpdmVkIGZyb20gcHJvZHVjZXJzICh0cmVlcyBiZWFyaW5nIGFwcGxlcyksIG5vdCBwcm9kdWNlcnMgdGhlbXNlbHZlcy5cXG5cXG40LiAqKlBvdGF0b2VzIChkKSoqIC0gUG90YXRvZXMgYXJlIGFuIGFncmljdWx0dXJhbCBjcm9wLCBhbmQgbGlrZSBhcHBsZXMsIHRoZXkgYXJlIGRlcml2ZWQgZnJvbSBwbGFudHMuIFRoZXkncmUgbm90IHByb2R1Y2VycywgYnV0IHRoZSBwcm9kdWNlcnMgYXJlIHRoZSBwb3RhdG8gcGxhbnRzLlxcblxcbjUuICoqRmllbGRzIChoKSoqIC0gQSBmaWVsZCByZWZlcnMgdG8gYW4gYWdyaWN1bHR1cmFsIGFyZWEgd2hlcmUgY3JvcHMgYXJlIGdyb3duLiBJdCdzIG5vdCBhIHByb2R1Y2VyIGl0c2VsZiwgYnV0IGNhbiBjb250YWluIHByb2R1Y2VycyBzdWNoIGFzIGdyYWlucywgdmVnZXRhYmxlcywgb3Igb3RoZXIgY3JvcHMuXFxuXFxuNi4gKipQbGFudHMgKGYpKiogLSBUaGlzIGlzIHRoZSBjb3JyZWN0IGFuc3dlci4gUGxhbnRzLCBpbiBnZW5lcmFsLCBhcmUgcHJvZHVjZXJzIHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgcGhvdG9zeW50aGVzaXMsIHdoaWNoIGNvbnZlcnRzIGxpZ2h0IGVuZXJneSBpbnRvIGNoZW1pY2FsIGVuZXJneSB0aGF0IGNhbiBiZSBsYXRlciByZWxlYXNlZCB0byBmdWVsIHRoZSBvcmdhbmlzbSdzIGFjdGl2aXRpZXMuXFxuXFxuNy4gKipGdW5naSAoZykqKiAtIEFsdGhvdWdoIGZ1bmdpIGFyZSBhdXRvdHJvcGhpYywgdGhlIHF1ZXN0aW9uIHNwZWNpZmljYWxseSByZWZlcnMgdG8gJ3RlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uJyBhcyBtYWpvciBmYWN0b3JzLiBXaGlsZSBmdW5naSBjYW4gaW5kZWVkIHBob3Rvc3ludGhlc2l6ZSAobGlrZSBhbGdhZSksIHRoZXkgYXJlIG9mdGVuIGNvbnNpZGVyZWQgZGVjb21wb3NlcnMsIG1vcmUgcmVsZXZhbnQgdG8gdGVtcGVyYXR1cmUgYW5kIHdhc3RlIGN5Y2xpbmcgaW4gYW4gZWNvc3lzdGVtIHJhdGhlciB0aGFuIHByaW1hcnkgcHJvZHVjZXJzLlxcblxcbkluIGNvbmNsdXNpb24sIHRoZSBwcmltYXJ5IHByb2R1Y2VycyBhcmUgKipwbGFudHMqKiBiZWNhdXNlIHRoZXkgYXJlIHRoZSBtYWluIGVudGl0aWVzIGNhcGFibGUgb2YgY29udmVydGluZyBzdW5saWdodCwgY2FyYm9uIGRpb3hpZGUsIGFuZCB3YXRlciBpbnRvIGNvbXBsZXggc3VnYXJzIHRocm91Z2ggcGhvdG9zeW50aGVzaXMsIHVzaW5nIHRlbXBlcmF0dXJlIGFuZCBsaWdodCAoYSBjb21wb25lbnQgb2YgcHJlY2lwaXRhdGlvbiBlZmZlY3RzIHZpYSBldmFwb3RyYW5zcGlyYXRpb24pIGFzIHByaW1hcnkgZmFjdG9ycy4gQW5pbWFscywgZnVuZ2ksIGFwcGxlcywgcG90YXRvZXMsIGFuZCBmaWVsZHMgZG8gbm90IGRpcmVjdGx5IGVuZ2FnZSBpbiB0aGlzIHByb2Nlc3MgaW4gdGhlIHNhbWUgd2F5IGFzIHBsYW50cywgYW5kIHRodXMsIGFyZSBub3QgcHJpbWFyeSBwcm9kdWNlcnMuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZlwifSJ9XSwgIjgiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGRvZXMgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBjaGFuZ2UgdmVnZXRhdGlvbiBpbnRvP1xuQW5zd2VyIENob2ljZXM6IChhKSBTY2FyY2UgcmVzb3VyY2VzIChiKSBIYXJtZnVsIHN1YnN0YW5jZXMgKGMpIFNjYXJzIChkKSBGb3NzaWwgZnVlbHMgKGUpIFNlZGltZW50IChmKSBTb21ldGhpbmcgdG8gbW92ZSAoZykgTWFnaWMgKGgpIFBpY25pY3MifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcImEpIFNjYXJjZSByZXNvdXJjZXMgLSBUaGlzIG9wdGlvbiBzdWdnZXN0cyB0aGF0IGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgbWFrZXMgdmVnZXRhdGlvbiBzY2FyY2UgcmVzb3VyY2VzLiBUaGlzIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2Ugc29pbCBhbmQgbXVkIGJlaW5nIGEgYnVyaWFsIGxvY2F0aW9uIGRvZXMgbm90IGltcGx5IHRoZSB2ZWdldGF0aW9uIGl0IGNvbnRhaW5zIGJlY29tZXMgc2NhcmNlLiBUaGUgdmVnZXRhdGlvbiBpdHNlbGYgd291bGRuJ3QgYmVjb21lIHNjYXJjZSBkdWUgdG8gYnVyaWFsOyByYXRoZXIsIGl0IG1heSBjb250cmlidXRlIHRvIHRoZSBmb3JtYXRpb24gb2YgZm9zc2lsIGZ1ZWxzLlxcblxcbmIpIEhhcm1mdWwgc3Vic3RhbmNlcyAtIFZlZ2V0YXRpb24gYnVyaWVkIGluIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCB0dXJuIGludG8gaGFybWZ1bCBzdWJzdGFuY2VzLiBXaGlsZSBpdCdzIHRydWUgdGhhdCBvdmVyIGdlb2xvZ2ljYWwgdGltZXNjYWxlcywgZGVjb21wb3NpdGlvbiBwcm9jZXNzZXMgY2FuIHByb2R1Y2UgdmFyaW91cyBzdWJzdGFuY2VzLCB0aGUgaW1tZWRpYXRlIHJlc3VsdCBvZiBidXJpYWwgaXNuJ3QgdGhlIGNyZWF0aW9uIG9mIGhhcm1mdWwgc3Vic3RhbmNlcy4gVGhlIGNvcnJlY3QgYW5zd2VyIGludm9sdmVzIGEgcHJvY2VzcyB0aGF0IGxlYWRzIHRvIGEgbW9yZSBjb21wbGV4IGZvc3NpbCBmdWVsLCBub3QganVzdCBoYXJtZnVsIHN1YnN0YW5jZXMuXFxuXFxuYykgU2NhcnMgLSBUaGlzIGFuc3dlciBjaG9pY2Ugc3VnZ2VzdHMgdGhlIHZlZ2V0YXRpb24gdHJhbnNmb3JtcyBpbnRvIHNjYXJzLiBTY2FycyBhcmUgaW5qdXJpZXMgb3Igd291bmRzIG9uIGFuIG9yZ2FuaXNtLCBhbmQgdGhlcmUgaXMgbm8gYmlvbG9naWNhbCBvciBnZW9sb2dpY2FsIHByb2Nlc3MgYnkgd2hpY2ggYnVyaWFsIHVuZGVyIHNvaWwgYW5kIG11ZCB3b3VsZCB0dXJuIHZlZ2V0YXRpb24gaW50byBzY2Fycy5cXG5cXG5mKSBTb21ldGhpbmcgdG8gbW92ZSAtIFRoaXMgYW5zd2VyIGltcGxpZXMgdGhhdCB0aGUgcmVzdWx0IG9mIHRoZSBidXJpYWwgcHJvY2VzcyBpcyBzb21ldGhpbmcgdXNlZCBmb3IgbW92ZW1lbnQuIEhvd2V2ZXIsIGZvc3NpbCBmdWVscywgZm9ybWVkIG92ZXIgbWlsbGlvbnMgb2YgeWVhcnMsIGFyZW4ndCB1c2VkIGRpcmVjdGx5IGZvciBtb3ZlbWVudCBidXQgYXJlIHNvdXJjZXMgb2YgZW5lcmd5IHdoZW4gY29tYnVzdGVkLiBUaGV5IGRvbid0IGJlY29tZSdzb21ldGhpbmcgdG8gbW92ZScgaW4gYW55IGltbWVkaWF0ZSBvciBkaXJlY3Qgc2Vuc2UuXFxuXFxuZykgTWFnaWMgLSBUaGlzIG9wdGlvbiBpcyBub3QgYSBzY2llbnRpZmljIG9yIGZhY3R1YWwgYW5zd2VyLiBUaGUgcHJvY2VzcyBvZiBob3cgdmVnZXRhdGlvbiB0cmFuc2Zvcm1zIGludG8gZm9zc2lsIGZ1ZWxzIGlzIGEgbmF0dXJhbCBnZW9sb2dpY2FsIHByb2Nlc3MsIG5vdCBhIG1hZ2ljYWwgb25lLlxcblxcbmgpIFBpY25pY3MgLSBUaGlzIG9wdGlvbiBpcyBjb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgYmlvbG9naWNhbCBvciBnZW9sb2dpY2FsIHByb2Nlc3MgZGVzY3JpYmVkIGluIHRoZSBxdWVzdGlvbi4gUGljbmljIGl0ZW1zIGFyZSBodW1hbi1tYWRlIGFuZCBkb24ndCByZXN1bHQgZnJvbSB0aGUgdHJhbnNmb3JtYXRpb24gb2YgZGVhZCBwbGFudCBtYXRlcmlhbC5cXG5cXG5TbyB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgKGQpIEZvc3NpbCBmdWVscywgYmVjYXVzZSB0aGlzIGlzIHRoZSBuYXR1cmFsIHByb2Nlc3MgYnkgd2hpY2ggZGVhZCB2ZWdldGF0aW9uIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgYmVjb21lcyBwYXJ0IG9mIHRoZSBmb3NzaWwgZnVlbCBkZXBvc2l0cy4gRm9zc2lsIGZ1ZWxzIGZvcm0gZnJvbSB0aGUgcmVtYWlucyBvZiBkZWFkIHBsYW50cyBhbmQgYW5pbWFscyB0aGF0IGhhdmUgYmVlbiBidXJpZWQgYW5kIHN1YmplY3RlZCB0byBpbW1lbnNlIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgbWlsbGlvbnMgb2YgeWVhcnMuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZFwifSJ9XSwgIjkiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGVuIHdpbGwgYW5pbWFscyBtb3ZlIHRvIGFub3RoZXIgYXJlYT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgVG8ga2VlcCB0aGVpciBib2R5IGhlYXQuIChiKSBSZXVzaW5nIG1hdGVyaWFscyAoYykgSWYgdGhleSBjYW4gbm8gbG9uZ2VyIGdldCBmb29kIChkKSBJZiB0aGV5IGFyZSBib3JlZCAoZSkgTWFyc2hlcyBhbmQgc3dhbXBzIChmKSBJZiB0aGV5IGhhdmUgdG9vIG11Y2ggbW9uZXkgKGcpIFdhcm0gYWlyIG1vdmluZyBpbnRvIGNvbGQgYWlyIChoKSBJZiB0aGV5IGhhdmUgdG9vIG11Y2ggZm9vZCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiV2hlbiBhbmltYWxzIG1vdmUgdG8gYW5vdGhlciBhcmVhLCBpdCdzIG5vdCBkdWUgdG86XFxuXFxuKGEpIEtlZXBpbmcgdGhlaXIgYm9keSBoZWF0IC0gVGhpcyBpcyB0eXBpY2FsbHkgaW5mbHVlbmNlZCBieSBzZWFzb25hbCBjaGFuZ2VzIG9yIHdlYXRoZXIgY29uZGl0aW9ucywgbm90IHRoZSBwaHlzaWNhbCBhY3Qgb2YgbW92aW5nIHRvIGFub3RoZXIgYXJlYS4gV2hpbGUgdGVtcGVyYXR1cmUgY2FuIGJlIGEgZmFjdG9yIGluIG1pZ3JhdGlvbiwgaXQgZG9lc24ndCBkcml2ZSB0aGUgZGVjaXNpb24gZm9yIHRoZSBtb3ZlbWVudCBpdHNlbGYuXFxuXFxuKGIpIFJldXNpbmcgbWF0ZXJpYWxzIC0gVGhpcyBvcHRpb24gcmVmZXJzIHRvIHJlY3ljbGluZyBvciByZXVzaW5nIHBoeXNpY2FsIG9iamVjdHMgYW5kIGhhcyBubyBkaXJlY3QgY29ycmVsYXRpb24gdG8gYW5pbWFsIG1pZ3JhdGlvbiBvciBtb3ZlbWVudC5cXG5cXG4oZCkgQmVpbmcgYm9yZWQgLSBCb3JlZG9tIGlzIGEgaHVtYW4gY29uc3RydWN0IGFuZCBkb2Vzbid0IGRpcmVjdGx5IGFwcGx5IHRvIGFuaW1hbHMnIGJlaGF2aW9yYWwgZGVjaXNpb25zLiBBbmltYWxzIGFyZSBkcml2ZW4gYnkgaW5zdGluY3RzIGFuZCBiYXNpYyBuZWVkcyByYXRoZXIgdGhhbiBib3JlZG9tLlxcblxcbihmKSBIYXZpbmcgdG9vIG11Y2ggbW9uZXkgLSBUaGlzIGlzIGFuIGVjb25vbWljIGNvbmNlcHQgdGhhdCBkb2Vzbid0IGFwcGx5IHRvIGFuaW1hbHMsIGFzIHRoZXkgZG9uJ3QgaGF2ZSBjdXJyZW5jeSBvciBmaW5hbmNpYWwgcmVzb3VyY2VzLlxcblxcbihlKSBNYXJzaGVzIGFuZCBzd2FtcHMgLSBUaGVzZSBhcmUgc3BlY2lmaWMgdHlwZXMgb2YgZWNvc3lzdGVtcywgYW5kIHdoaWxlIGFuaW1hbHMgbWF5IGluaGFiaXQgdGhlc2UgYXJlYXMgb3IgbW92ZSB0byB0aGVtIGZvciB2YXJpb3VzIHJlYXNvbnMsIG1lcmVseSBleHBsYWluaW5nIHdoZXJlIHRoZXkgbWlnaHQgZ28gZG9lc24ndCBhZGRyZXNzIHdoeSB0aGV5IG1vdmUuXFxuXFxuKGcpIFdhcm0gYWlyIG1vdmluZyBpbnRvIGNvbGQgYWlyIC0gVGhpcyBkZXNjcmliZXMgYXRtb3NwaGVyaWMgcGhlbm9tZW5hIGFuZCBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIG1vdmVtZW50IG9mIGFuaW1hbHMuXFxuXFxuKGgpIEhhdmluZyB0b28gbXVjaCBmb29kIC0gV2hpbGUgYW5pbWFscyBtaWdodCBtaWdyYXRlIHRvIGF2b2lkIGFyZWFzIG9mIG92ZXItY29tcGV0aXRpb24gZm9yIGZvb2QgcmVzb3VyY2VzLCB0aGUgcGhyYXNlICd0b28gbXVjaCBmb29kJyBpcyBub3QgYSBsb2dpY2FsIG1vdGl2YXRvciBmb3IgbW92aW5nIHRvIGEgbmV3IGFyZWEuIFRvbyBtdWNoIGZvb2Qgd291bGQgbWVhbiB0aGV5J3JlIGFscmVhZHkgaW4gYSBnb29kIGxvY2F0aW9uLCBuZWdhdGluZyB0aGUgbmVlZCBmb3IgbWlncmF0aW9uLlxcblxcbihjKSBJZiB0aGV5IGNhbiBubyBsb25nZXIgZ2V0IGZvb2QgLSBUaGlzIGlzIGNvcnJlY3QgYmVjYXVzZSBhbmltYWxzIG9mdGVuIG1pZ3JhdGUgaW4gcmVzcG9uc2UgdG8gc2NhcmNpdHkgaW4gdGhlaXIgY3VycmVudCBoYWJpdGF0LiBJbmFkZXF1YXRlIGZvb2QgYXZhaWxhYmlsaXR5IGNhbiBsZWFkIHRvIHN0YXJ2YXRpb24sIHByb21wdGluZyBhIG1vdmVtZW50IHRvIGFyZWFzIHdoZXJlIHJlc291cmNlcyBhcmUgbW9yZSBhYnVuZGFudC4gVGhleSBhcmUgc2Vla2luZyB0byBlbnN1cmUgdGhlaXIgc3Vydml2YWwgYW5kIHJlcHJvZHVjdGlvbi5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyAoYykgYXMgaXQgaXMgdGhlIG1vc3QgbG9naWNhbCBleHBsYW5hdGlvbiBmb3IgYW5pbWFsIG1vdmVtZW50IHRvIGFub3RoZXIgYXJlYSBiYXNlZCBvbiBzdXJ2aXZhbCBuZWVkcywgcGFydGljdWxhcmx5IGZvb2QgYXZhaWxhYmlsaXR5LlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImNcIn0ifV0sICIxMCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEEgZmlyZWNyYWNrZXIgY29udmVydHMgY2hlbWljYWwgZW5lcmd5IGludG8gd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgS2luZXRpYyBlbmVyZ3kgKGIpIExvdWQgbm9pc2VzIChjKSBWaWJyYXRpbmcgd2F2ZXMgKGQpIEFuIG9iamVjdCBpcyBzZWVuIChlKSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5IChmKSBEZW94eXJpYm9udWNsZWljIGFjaWQgKGcpIEh5ZHJvZ2VuIGFuZCBveHlnZW4gKGgpIEhhcm1mdWwgc3Vic3RhbmNlcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiMS4gUmVhZCB0aGUgcXVlc3Rpb246ICdBIGZpcmVjcmFja2VyIGNvbnZlcnRzIGNoZW1pY2FsIGVuZXJneSBpbnRvIHdoYXQ/J1xcbiAgICAtIFRoZSBxdWVzdGlvbiBhc2tzIGFib3V0IHRoZSBmb3JtIG9mIGVuZXJneSB0aGF0IGEgZmlyZWNyYWNrZXIgdHJhbnNmb3JtcyBjaGVtaWNhbCBlbmVyZ3kgaW50by5cXG5cXG4yLiBJZGVudGlmeSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBvcHRpb25zOlxcbiAgIC0gYSkgS2luZXRpYyBlbmVyZ3lcXG4gICAtIGIpIExvdWQgbm9pc2VzXFxuICAgLSBjKSBWaWJyYXRpbmcgd2F2ZXNcXG4gICAtIGQpIEFuIG9iamVjdCBpcyBzZWVuXFxuICAgLSBlKSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5XFxuICAgLSBmKSBEZW94eXJpYm9udWNsZWljIGFjaWRcXG4gICAtIGcpIEh5ZHJvZ2VuIGFuZCBveHlnZW5cXG4gICAtIGgpIEhhcm1mdWwgc3Vic3RhbmNlc1xcblxcbjMuIERldGVybWluZSB3aGljaCBvcHRpb25zIGFyZSBub3QgbG9naWNhbCBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZTpcXG4gICAtIEtpbmV0aWMgZW5lcmd5IGNvdWxkIGJlIGEgcmVzdWx0IG9mIHRoZSBmaXJlY3JhY2tlcidzIGV4cGxvc2lvbiwgYnV0IGl0IGlzIG5vdCB0aGUgbW9zdCBkaXJlY3Qgb3Igc3BlY2lmaWMgdHJhbnNmb3JtYXRpb24uXFxuICAgLSBMb3VkIG5vaXNlcyBhcmUgYSBieXByb2R1Y3QgYnV0IGRvIG5vdCByZXByZXNlbnQgZW5lcmd5LlxcbiAgIC0gVmlicmF0aW5nIHdhdmVzIG1heSByZXN1bHQgZnJvbSB0aGUgZXhwbG9zaW9uLCBidXQgdGhleSBhcmUgYWxzbyBhIGJ5cHJvZHVjdCByYXRoZXIgdGhhbiB0aGUgcHJpbWFyeSBjb252ZXJ0ZWQgZW5lcmd5LlxcbiAgIC0gQW4gb2JqZWN0IGlzIHNlZW46IFRoaXMgaXMgbm90IGEgZm9ybSBvZiBlbmVyZ3kuXFxuICAgLSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5IGlzIG5vdCB0aGUgcHJpbWFyeSBmb3JtIG9mIGVuZXJneSBjb252ZXJzaW9uIGluIGEgZmlyZWNyYWNrZXIuXFxuICAgLSBEZW94eXJpYm9udWNsZWljIGFjaWQgKEROQSkgaXMgb3JnYW5pYyBtYXRlcmlhbCBhbmQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIGVuZXJneSBjb252ZXJzaW9uIGF0IHBsYXkuXFxuICAgLSBIeWRyb2dlbiBhbmQgb3h5Z2VuIGFyZSBlbGVtZW50cyBwcm9kdWNlZCBpbiB0aGUgY2hlbWljYWwgcmVhY3Rpb24gYnV0IG5vdCB0aGUgZm9ybSBvZiBlbmVyZ3kgaXRzZWxmLlxcbiAgIC0gSGFybWZ1bCBzdWJzdGFuY2VzIGFyZSBieXByb2R1Y3RzIGJ1dCBub3QgdGhlIGZvcm0gb2YgZW5lcmd5LlxcblxcbjQuIFRoZSBjb3JyZWN0IGFuc3dlciBpcyAoYyk6XFxuICAgLSBWaWJyYXRpbmcgd2F2ZXM6IFdoaWxlIGZpcmVjcmFja2VycyBkbyBpbmRlZWQgcHJvZHVjZSB2aWJyYXRpb25zICh3aGljaCBjYW4gZmVsdCBvciBoZWFyZCBhcyBzb3VuZCksIHRoZSBtb3N0IGFjY3VyYXRlIGFuZCBjb21wbGV0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZW5lcmd5IHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBsaXN0ZWQgZGlyZWN0bHkuXFxuXFxuNS4gRXhwbGFuYXRpb24gb2Ygd2h5IG90aGVyIG9wdGlvbnMgYXJlIGluY29ycmVjdDpcXG4gICAtIGEpIEtpbmV0aWMgZW5lcmd5OiBXaGlsZSBraW5ldGljIGVuZXJneSBpcyBpbnZvbHZlZCBpbiB0aGUgZXhwbG9zaW9uLCBpdCBpcyBub3QgdGhlIGltbWVkaWF0ZSBhbmQgcHJpbWFyeSBjb252ZXJzaW9uIGZvcm0uXFxuICAgLSBiKSBMb3VkIG5vaXNlczogVGhpcyBpcyBhIHJlc3VsdCBvZiB0aGUgZXhwbG9zaW9uIGJ1dCBub3QgYSBmb3JtIG9mIGVuZXJneS5cXG4gICAtIGQpIEFuIG9iamVjdCBpcyBzZWVuOiBUaGlzIHN0YXRlbWVudCBpcyBpcnJlbGV2YW50IHRvIGVuZXJneSBjb252ZXJzaW9uLlxcbiAgIC0gZSkgRWxlY3Ryb21hZ25ldGljIGVuZXJneTogQWx0aG91Z2ggcmVsYXRlZCB0byB0aGUgZW5lcmd5IHJlbGVhc2VkIGR1cmluZyB0aGUgZXhwbG9zaW9uIChsaWdodCBhbmQgc291bmQpLCBpdCBpcyBub3QgdGhlIG1vc3QgZGlyZWN0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb252ZXJzaW9uIGZyb20gY2hlbWljYWwgdG8gYW5vdGhlciBmb3JtLlxcbiAgIC0gZikgRGVveHlyaWJvbnVjbGVpYyBhY2lkIChETkEpOiBOb3QgcmVsYXRlZCB0byB0aGUgZW5lcmd5IHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MuXFxuICAgLSBnKSBIeWRyb2dlbiBhbmQgb3h5Z2VuOiBQcm9kdWNlZCBlbGVtZW50cyBidXQgbm90IGZvcm1zIG9mIGVuZXJneS5cXG4gICAtIGgpIEhhcm1mdWwgc3Vic3RhbmNlczogQnlwcm9kdWN0cyBidXQgbm90IGZvcm1zIG9mIGVuZXJneS5cXG5cXG5JbiBjb25jbHVzaW9uLCB3aGlsZSBhIGZpcmVjcmFja2VyIHByaW1hcmlseSBjb252ZXJ0cyBjaGVtaWNhbCBlbmVyZ3kgaW50byBraW5ldGljIGVuZXJneSBhbmQgdmlicmF0aW9ucyAoc291bmQgd2F2ZXMpLCB0aGUgY2xvc2VzdCBvcHRpb24gcHJvdmlkZWQgaXMgKGMpIFZpYnJhdGluZyB3YXZlcywgaW5kaWNhdGluZyB0aGUgbW9zdCBldmlkZW50IHBoeXNpY2FsIGVmZmVjdCBhbmQgZm9ybSBvZiBlbmVyZ3kgdHJhbnNmb3JtYXRpb24gZnJvbSBjaGVtaWNhbCBlbmVyZ3kgYXQgdGhlIGVsZW1lbnRhcnkgbGV2ZWwuXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjExIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzP1xuQW5zd2VyIENob2ljZXM6IChhKSBNYWpvciBlZmZlY3RzIChiKSBSZXNwaXJhdGlvbiAoYykgUm9sZXggKGQpIERlbnNpdHkgKGUpIERpcGh0aGVyaWEgKGYpIENhbmlzIGx1cHVzIChnKSBTa2luIGNvbG9yIChoKSBEaWdlc3Rpb24ifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcIihhKSBNYWpvciBlZmZlY3RzOlxcblRoaXMgdGVybSBjb3VsZCBwb3RlbnRpYWxseSByZWxhdGUgdG8gZ2VuZXRpY3MsIGJ1dCBpdCdzIGEgZ2VuZXJhbCB0ZXJtIHRoYXQgY291bGQgZGVzY3JpYmUgdGhlIGVmZmVjdHMgb2YgbXVsdGlwbGUgZ2VuZXMgb24gYSBwaGVub3R5cGUsIHJhdGhlciB0aGFuIGEgc3BlY2lmaWMgcmVzdWx0LiBUaHVzLCBpdCdzIG5vdCBhIGRpcmVjdCBhbnN3ZXIgdG8gdGhlIHF1ZXN0aW9uIGFza2luZyBmb3IgYSBzcGVjaWZpYyByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuXFxuXFxuKGIpIFJlc3BpcmF0aW9uOlxcblJlc3BpcmF0aW9uIGlzIGEgYmlvbG9naWNhbCBwcm9jZXNzIGludm9sdmluZyB0aGUgZXhjaGFuZ2Ugb2YgZ2FzZXMgKG94eWdlbiBhbmQgY2FyYm9uIGRpb3hpZGUpIHRoYXQgb2NjdXJzIGluIGxpdmluZyBvcmdhbmlzbXMuIFdoaWxlIGdlbmUgaW50ZXJhY3Rpb25zIGNhbiBpbmZsdWVuY2UgbWV0YWJvbGljIHByb2Nlc3NlcyBpbmNsdWRpbmcgcmVzcGlyYXRpb24sIHRoZSB0ZXJtICdyZXNwaXJhdGlvbicgaXRzZWxmIGlzIG5vdCBhIHJlc3VsdCBkaXJlY3RseSBzdGVtbWluZyBmcm9tIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLlxcblxcbihjKSBSb2xleDpcXG5BIFJvbGV4IGlzIGEgbHV4dXJ5IHdyaXN0d2F0Y2guIFRoaXMgb3B0aW9uIGlzIGlycmVsZXZhbnQgdG8gdGhlIGNvbnRleHQgb2YgZ2VuZXRpY3MgYW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLlxcblxcbihkKSBEZW5zaXR5OlxcbkRlbnNpdHkgaXMgYSBwaHlzaWNhbCBwcm9wZXJ0eSBvZiBtYXR0ZXIgYW5kIGRvZXMgbm90IGRpcmVjdGx5IHJlbGF0ZSB0byBnZW5ldGljcyBvciB0aGUgaW50ZXJhY3Rpb24gb2YgbXVsdGlwbGUgZ2VuZXMuXFxuXFxuKGUpIERpcGh0aGVyaWE6XFxuRGlwaHRoZXJpYSBpcyBhIGJhY3RlcmlhbCBkaXNlYXNlOyB3aGlsZSBnZW5lcyBjYW4gaW5mbHVlbmNlIHN1c2NlcHRpYmlsaXR5IHRvIGNlcnRhaW4gZGlzZWFzZXMsICdkaXBodGhlcmlhJyBpdHNlbGYgaXNuJ3QgYSByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMgYnV0IHJhdGhlciBhbiBlZmZlY3Qgb2YgYSBwYXRob2dlbmljIGJhY3Rlcml1bSAoQ29yeW5lYmFjdGVyaXVtIGRpcGh0aGVyaWFlKS5cXG5cXG4oZikgQ2FuaXMgbHVwdXM6XFxuQ2FuaXMgbHVwdXMgaXMgdGhlIHNjaWVudGlmaWMgbmFtZSBmb3IgdGhlIGdyYXkgd29sZiwgYSBzcGVjaWVzLiBUaGlzIGlzIG5vdCBhIHJlc3VsdCBhcmlzaW5nIGZyb20gdGhlIGludGVyYWN0aW9uIG9mIG11bHRpcGxlIGdlbmVzIGluIGEgZ2VuZXRpYyBjb250ZXh0OyBpdCByZWZlcnMgdG8gYSB0YXhvbm9taWMgY2xhc3NpZmljYXRpb24uXFxuXFxuKGcpIFNraW4gY29sb3I6XFxuU2tpbiBjb2xvciBpcyBvZnRlbiBpbmZsdWVuY2VkIGJ5IHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLCBpbmNsdWRpbmcgdGhvc2UgcmVzcG9uc2libGUgZm9yIHRoZSBwcm9kdWN0aW9uIG9mIG1lbGFuaW4sIHdoaWNoIGdpdmVzIHNraW4gaXRzIGNvbG9yLiBUaGlzIGlzIGEgZGlyZWN0IHJlc3VsdCBvZiBnZW5ldGljIGZhY3RvcnMuXFxuXFxuKGgpIERpZ2VzdGlvbjpcXG5MaWtlIHJlc3BpcmF0aW9uLCBkaWdlc3Rpb24gaXMgYSBiaW9sb2dpY2FsIHByb2Nlc3MgaW52b2x2aW5nIG11bHRpcGxlIHN0ZXBzIGFuZCBvcmdhbnMuIFdoaWxlIGdlbmVzIGNlcnRhaW5seSBwbGF5IGEgcm9sZSBpbiByZWd1bGF0aW5nIGRpZ2VzdGl2ZSBwcm9jZXNzZXMgKGUuZy4sIGVuenltZXMgaW52b2x2ZWQgaW4gZGlnZXN0aW9uKSwgJ2RpZ2VzdGlvbicgYXMgYSBwcm9jZXNzIHJhdGhlciB0aGFuIGEgcmVzdWx0IG9mIGdlbmV0aWMgaW50ZXJhY3Rpb24gaXNuJ3QgYXMgc3BlY2lmaWMgYXMgc2tpbiBjb2xvciBmb3IgYSBnZW5ldGljIHRyYWl0J3MgcmVzdWx0LlxcblxcblRodXMsIChnKSBTa2luIGNvbG9yIGlzIHRoZSBtb3N0IHNwZWNpZmljIGFuZCBkaXJlY3QgcmVzdWx0IG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBBbHRob3VnaCBvdGhlciBwcm9jZXNzZXMgKHJlc3BpcmF0aW9uLCBkaWdlc3Rpb24pIG1pZ2h0IGJlIGluZmx1ZW5jZWQgYnkgZ2VuZSBpbnRlcmFjdGlvbnMsIHRoZXkgcmVmZXIgdG8gb25nb2luZyBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gYSBzcGVjaWZpYywgb2JzZXJ2YWJsZSBvdXRjb21lIGxpa2Ugc2tpbiBjb2xvci5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJnXCJ9In1dLCAiMTIiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGNhbiBmZWVkIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU2hlZXAgKGIpIFNhbG1vbiAoYykgR3Jhc3NlcyAoZCkgQmF0cyAoZSkgQW5pbWFscyAoZikgU2hydWJzIChnKSBIdW1hbnMgKGgpIFRyZWVzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIoYSkgKipTaGVlcCoqOiBTaGVlcCBhcmUgaGVyYml2b3JlcywgcHJpbWFyaWx5IGZlZWRpbmcgb24gZ3Jhc3NlcyBhbmQgb3RoZXIgcGxhbnRzLiBUaGV5IHR5cGljYWxseSBjYW5ub3QgZmVlZCBhdCBtdWx0aXBsZSB0cm9waGljIGxldmVscy5cXG5cXG4oYikgKipTYWxtb24qKjogV2hpbGUgc2FsbW9uIGNhbiB2YXJ5IGluIHRoZWlyIGRpZXQsIHRoZXkgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIHRvIGJlIHByaW1hcmlseSBwaXNjaXZvcmVzIChmaXNoLWVhdGluZyBwcmVkYXRvcnMpIGFuZCBkbyBub3QgZmVlZCBvbiBwbGFudHMuIFRoZXJlZm9yZSwgYWx0aG91Z2ggdGhlaXIgZGlldCBjYW4gY2hhbmdlIGJhc2VkIG9uIHRoZWlyIGxpZmUgc3RhZ2UsIHRoZXkgZG9uJ3QgZ2VuZXJhbGx5IGZlZWQgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLlxcblxcbihjKSAqKkdyYXNzZXMqKjogR3Jhc3NlcyBhcmUgcGxhbnRzLCBzcGVjaWZpY2FsbHkgbW9ub2NvdHMgdXN1YWxseSBmb3VuZCBpbiB0aGUgb3JkZXIgUG9hbGVzLiBUaGV5IGFyZSBhdXRvdHJvcGhzLCBtZWFuaW5nIHRoZXkgcHJvZHVjZSB0aGVpciBvd24gZm9vZCB0aHJvdWdoIHBob3Rvc3ludGhlc2lzLiBUaGV5IGRvIG5vdCBmZWVkIGF0IGFueSB0cm9waGljIGxldmVsIGJlY2F1c2UgdGhleSBhcmUgbm90IGNvbnN1bWVycyBidXQgcHJvZHVjZXJzLlxcblxcbihkKSAqKkJhdHMqKjogQmF0cyBhcmUgdHlwaWNhbGx5IGNvbnNpZGVyZWQgaW5zZWN0aXZvcmVzLCBmZWVkaW5nIHByaW1hcmlseSBvbiBpbnNlY3RzLiBTb21lIGJhdCBzcGVjaWVzIGFsc28gZWF0IGZydWl0cyBvciBuZWN0YXIsIGJ1dCB0aGV5IGRvbid0IGNyb3NzIHRyb3BoaWMgbGV2ZWxzLiBUaGV5IGZlZWQgYXQgYSBzaW5nbGUgdHJvcGhpYyBsZXZlbCwgZWl0aGVyIGFzIGNvbnN1bWVycyBvZiBpbnNlY3RzIChwcmltYXJ5IGNvbnN1bWVycykgb3IgZnJ1aXRzIChvbW5pdm9yZXMpLlxcblxcbihlKSAqKkFuaW1hbHMqKjogVGhpcyBpcyBhIGJyb2FkIHRlcm0gZW5jb21wYXNzaW5nIG1hbnkgZGlmZmVyZW50IG9yZ2FuaXNtcywgYnV0IGl0IGRvZXNuJ3Qgc3BlY2lmaWNhbGx5IHJlZmVyIHRvIGEgdHJvcGhpYyBsZXZlbC4gQWxsIGFuaW1hbHMgYXJlIGNvbnN1bWVycyBhbmQgdGhlcmVmb3JlIGJlbG9uZyB0byBhdCBsZWFzdCBvbmUgdHJvcGhpYyBsZXZlbCwgYnV0IHRoZXkgbWF5IG9jY3VweSBkaWZmZXJlbnQgbGV2ZWxzIGRlcGVuZGluZyBvbiB0aGVpciBkaWV0LiBIb3dldmVyLCB0aGUgcXVlc3Rpb24gaW1wbGllcyBhIHNpbmdsZSBsZXZlbCwgc28gdGhpcyBpc24ndCBhIHNhdGlzZmFjdG9yeSBhbnN3ZXIuXFxuXFxuKGYpICoqU2hydWJzKio6IFNpbWlsYXIgdG8gZ3Jhc3Nlcywgc2hydWJzIGFyZSBhdXRvdHJvcGhpYyBvcmdhbmlzbXMuIFRoZXkgYXJlIGNvbnN1bWVycyBvZiBhaXIgYW5kIHdhdGVyLCBwYXJ0aWN1bGFybHkgc3VubGlnaHQsIHRocm91Z2ggcGhvdG9zeW50aGVzaXMuIFRoZXkgZG8gbm90IGZlZWQgYXQgYW55IHRyb3BoaWMgbGV2ZWwuXFxuXFxuKGcpICoqSHVtYW5zKio6IEh1bWFucyBhcmUgb21uaXZvcmVzLCBtZWFuaW5nIHRoZXkgY2FuIGNvbnN1bWUgYm90aCBwbGFudCBhbmQgYW5pbWFsIG1hdHRlci4gV2hpbGUgaXQgbWlnaHQgc2VlbSBsaWtlIHRoZXkgY3Jvc3MgdHJvcGhpYyBsZXZlbHMgYnkgY29uc3VtaW5nIGZvb2RzIGZyb20gZGlmZmVyZW50IHNvdXJjZXMsIGluZGl2aWR1YWwgbWVhbHMgZG8gbm90IHF1YWxpZnkgYXMgY3Jvc3NpbmcgdHJvcGhpYyBsZXZlbHMuIENyb3NzaW5nIHRyb3BoaWMgbGV2ZWxzIHdvdWxkIGltcGx5IGEgY29uc2lzdGVudCBkaWV0IHdoZXJlIG9uZSBpcyBhbiBhbmltYWwgY29uc3VtZXIgYW5kIGFub3RoZXIgYSBwbGFudCBjb25zdW1lciwgd2hpY2ggaHVtYW5zLCBhcyBvbW5pdm9yZXMsIGRvIG5vdCBzdHJpY3RseSBhZGhlcmUgdG8uXFxuXFxuKGgpICoqVHJlZXMqKjogVHJlZXMgYmVsb25nIHRvIHRoZSBwbGFudCBraW5nZG9tLCBtb3JlIHNwZWNpZmljYWxseSB0byB0aGUgZGl2aXNpb24gVHJhY2hlb3BoeXRhLCBhbmQgbGlrZSBzaHJ1YnMgYW5kIGdyYXNzZXMsIHRoZXkgYXJlIGF1dG90cm9waGljIGFuZCBkbyBub3QgZmVlZCBhdCBhbnkgdHJvcGhpYyBsZXZlbC5cXG5cXG5Ob25lIG9mIHRoZSBnaXZlbiBvcHRpb25zIGluZGljYXRlIGEgbGlmZXN0eWxlIHRoYXQgY29uc2lzdGVudGx5IGludm9sdmVzIGZlZWRpbmcgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLiBcXG5cXG5UaGUgY29ycmVjdCBhbnN3ZXIgY2hvaWNlIHNob3VsZCBiZXR0ZXIgcmVmbGVjdCBhbiBvcmdhbmlzbSB0aGF0LCB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcyBvciBzcGVjaWZpYyBjb25kaXRpb25zLCBtaWdodCBjb25zdW1lIGVudGl0aWVzIGZyb20gbXVsdGlwbGUgdHJvcGhpYyBsZXZlbHMsIGJ1dCB0aGUgcHJvdmlkZWQgY2hvaWNlcyBkbyBub3QgZml0IHRoYXQgZGVzY3JpcHRpb24gZGlyZWN0bHkuIEhvd2V2ZXIsIHNpbmNlIHRoZSBxdWVzdGlvbiBpcyBhc2tpbmcgZm9yIGEgYmlvbG9naWNhbCBlbnRpdHksIGh1bWFucywgd2l0aCB0aGVpciBkaXZlcnNlIGRpZXQgYXNwZWN0LCBhcmUgY29uc2lkZXJlZCBvbW5pdm9yZXMgY2FwYWJsZSBvZiBjb25zdW1pbmcgcGxhbnRzIGFuZCBhbmltYWxzLiBUaGVyZWZvcmUsIGh1bWFucyBjb3VsZCBiZSBpbmNvcnJlY3RseSBwZXJjZWl2ZWQgYXMgZml0dGluZyB0aGUgZGVzY3JpcHRpb24gb2YgJ2ZlZWQgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLCcgYnV0IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBtdWx0aXBsZS1jaG9pY2UgZm9ybWF0IGFuZCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9ucywgbm9uZSBhcHByb3ByaWF0ZWx5IGRpc3BsYXkgdGhpcyBjYXBhYmlsaXR5LiBIZW5jZSwgdGhlIGNsb3Nlc3QgYWx0aG91Z2ggbWlzbGVhZGluZyBhbnN3ZXIgbWlnaHQgYmUgKGEpIFNoZWVwLCBzaW5jZSB0aGUgcXVlc3Rpb24gaW5jb3JyZWN0bHkgYXNzdW1lcyB0aGVyZSBleGlzdHMgYW4gb3B0aW9uIHRoYXQgZml0cyB0aGUgdHJvcGhpYyBsZXZlbCBjcm9zc2luZyBkZXNjcmlwdGlvbiBhbW9uZyB0aGUgcHJvdmlkZWQgY2hvaWNlcy5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJhXCJ9In1dLCAiMTMiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaG8gY2FuIHNoaXZlcj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQmF0cyAoYikgU2lkZXdhbGtzIChjKSBIdW1hbnMgKGQpIEJlZXMgKGUpIEtvYWxhcyAoZikgTW91bnRhaW5zIChnKSBUcmVlcyAoaCkgUGVvcGxlIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJMZXQncyBhbmFseXplIGVhY2ggYW5zd2VyIGNob2ljZTpcXG5cXG4oYSkgKipCYXRzKio6IFdoaWxlIGJhdHMgYXJlIGluZGVlZCBjYXBhYmxlIG9mIHNoaXZlcmluZywgdGhleSBhcmUgbm90IHRoZSBiZXN0IGFuc3dlciBmb3IgdGhpcyBxdWVzdGlvbi4gSXQncyBwb3NzaWJsZSB0aGV5IHdlcmUgaW5jbHVkZWQgdG8gdGVzdCBpZiB5b3UgY29uc2lkZXIgc3BlY2lhbGl6ZWQgaGliZXJuYXRpbmcgbWFtbWFscy5cXG5cXG4oYikgKipTaWRld2Fsa3MqKjogU2lkZXdhbGtzIGFyZSBpbmFuaW1hdGUgb2JqZWN0cyBhbmQgZG8gbm90IGhhdmUgdGhlIGFiaWxpdHkgdG8gc2hpdmVyLiBUaGV5IGNhbm5vdCBnZW5lcmF0ZSBvciBjb250cm9sIGJvZHkgaGVhdC5cXG5cXG4oYykgKipIdW1hbnMqKjogSHVtYW5zIGNhbiBkZWZpbml0ZWx5IHNoaXZlci4gU2hpdmVyaW5nIGlzIGEgcGh5c2lvbG9naWNhbCByZXNwb25zZSBpbiBodW1hbnMgYW5kIG1hbnkgYW5pbWFscyB3aGVyZSByaHl0aG1pYyBtdXNjbGUgY29udHJhY3Rpb25zIGdlbmVyYXRlIGhlYXQgdG8gaGVscCBtYWludGFpbiBib2R5IHRlbXBlcmF0dXJlLCBlc3BlY2lhbGx5IGR1cmluZyBjb2xkIGNvbmRpdGlvbnMuXFxuXFxuKGQpICoqQmVlcyoqOiBUaGlzIGlzIHRoZSBjb3JyZWN0IGFuc3dlci4gU2hpdmVyaW5nLCBpbiB0aGlzIGJpb2xvZ2ljYWwgY29udGV4dCwgaXMgYWxzbyBrbm93biBhcyAndGF4aWxsYXRpb24nIGluIGJlZXMuIEl0J3MgYSByZXNwb25zZSB0byBjb2xkIHRlbXBlcmF0dXJlcyB3aGVyZSBiZWVzIGNsdXN0ZXIgdGhlaXIgYm9kaWVzIHRvZ2V0aGVyIGFuZCBzaGl2ZXIgdG8gZ2VuZXJhdGUgd2FybXRoIGFuZCBjb25zZXJ2ZSBpdC5cXG5cXG4oZSkgKipLb2FsYXMqKjogV2hpbGUga29hbGFzIGFyZSBtYW1tYWxzIGFuZCBjYXBhYmxlIG9mIHNvbWUgZm9ybXMgb2Ygc2hpdmVyaW5nLCB0aGUgdGVybSAnc2hpdmVyJyBpcyB0eXBpY2FsbHkgdXNlZCBpbiBhIGNvbnRleHQgb2YgcmFwaWQgbXVzY2xlIGNvbnRyYWN0aW9ucyB0byBnZW5lcmF0ZSBoZWF0IGluIHJlc3BvbnNlIHRvIGNvbGQgdGVtcGVyYXR1cmVzLiBLb2FsYXMsIGJlaW5nIGVjdG90aGVybWljIChjb2xkLWJsb29kZWQpLCBkb24ndCBzaGl2ZXIgaW4gdGhlIHNhbWUgY29udGV4dCBhcyBtYW1tYWxzIGxpa2UgaHVtYW5zIG9yIGJlZXMuIFRoZXkgbWFpbnRhaW4gdGhlaXIgYm9keSB0ZW1wZXJhdHVyZSB0aHJvdWdoIGV4dGVybmFsIHNvdXJjZXMsIGxpa2Ugc3VuIGV4cG9zdXJlLCBhbmQgZ2VuZXJhbGx5IGRvbid0IHNoaXZlciBpbiByZXNwb25zZSB0byBjb2xkIGFzIG1hbW1hbHMgZG8uXFxuXFxuKGYpICoqTW91bnRhaW5zKio6IE1vdW50YWlucyBhcmUgaW5hbmltYXRlIGdlb2dyYXBoaWNhbCBmZWF0dXJlcyBhbmQgZG8gbm90IHBvc3Nlc3MgdGhlIGFiaWxpdHkgdG8gc2hpdmVyIG9yIHJlZ3VsYXRlIGJvZHkgdGVtcGVyYXR1cmUgaW4gYW55IG1hbm5lci5cXG5cXG4oZykgKipUcmVlcyoqOiBUcmVlcywgYmVpbmcgcGxhbnRzLCBkbyBub3QgaGF2ZSB0aGUgY2VsbHVsYXIgYW5kIHBoeXNpb2xvZ2ljYWwgY2FwYWNpdHkgdG8gc2hpdmVyIG9yIGdlbmVyYXRlIGhlYXQgdGhyb3VnaCBtdXNjbGUgY29udHJhY3Rpb25zLlxcblxcbihoKSAqKlBlb3BsZSoqIChyZXBlYXRlZCBmcm9tIChjKSk6IFRoaXMgaXMgYSByZXBlYXQgb2YgdGhlIGNvcnJlY3QgYW5zd2VyIGZvciBodW1hbnMsIHBvc3NpYmx5IHRvIHRlc3QgaWYgeW91J3JlIHBheWluZyBhdHRlbnRpb24gb3IgaWYgeW91IG1pZ2h0IHRyeSB0byBzZWxlY3QgaXQgYWdhaW4gdW5pbnRlbnRpb25hbGx5LlxcblxcblNvLCB3aGlsZSAoYykgJ0h1bWFucycgaXMgdGVjaG5pY2FsbHkgY29ycmVjdCwgdGhlIGludGVuZGVkIGFuc3dlciBpcyAoZCkgJ0JlZXMnLCB3aGljaCBpbmNsdWRlcyBhIGJyb2FkZXIgYW5kIG1vcmUgc3BlY2lmaWMgZ3JvdXAgdGhhdCBjYW4gc2hpdmVyIHdpdGhpbiB0aGUgY29udGV4dCBvZiBiaW9sb2dpY2FsIHNoaXZlcmluZyBtZWNoYW5pc21zLiBUaGUgb3RoZXIgY2hvaWNlcyBkbyBub3QgcmVsYXRlIHRvIHNoaXZlcmluZyBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBub3QgbGl2aW5nIGJlaW5ncyAoYiwgZiwgZywgaCkgb3Igbm90IGNhcGFibGUgb2Ygc2hpdmVyaW5nIGFzIGEgbWVjaGFuaXNtIGZvciB0aGVybW9yZWd1bGF0aW9uIChhLCBlKS5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJkXCJ9In1dLCAiMTQiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBLaXR0ZW5zIHRoYXQgYXJlIHByYWN0aWNpbmcgaHVudGluZyBpcyBhbiBleGFtcGxlIG9mIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIExlYXJuaW5nIGJlaGF2aW9yIChiKSBDb21wZXRpbmcgZm9yIHJlc291cmNlcyAoYykgV2FybS1ibG9vZGVkIChkKSBDb21wZXRpdGlvbiAoZSkgQmFkIGJlaGF2aW9yIChmKSBMZWFybmluZyBub3RoaW5nIChnKSBFeHRpbmd1aXNoaW5nIGJlaGF2aW9yIChoKSBFbmVyZ3kgb2YgbW92aW5nIG9iamVjdHMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcInJlYXNvbmluZ1wiOiBcIlxcbioqT3B0aW9uIChhKSBMZWFybmluZyBiZWhhdmlvcioqOiBLaXR0ZW5zIGh1bnRpbmcgaXMgYSBjbGVhciBleGFtcGxlIG9mIHRoZW0gbGVhcm5pbmcgc3Vydml2YWwgc2tpbGxzIGFuZCBiZWhhdmlvcnMuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZWlyIGRldmVsb3BtZW50IGFzIHRoZXkgZ3JvdyBpbnRvIGFkdWx0IGNhdHMuIFRoaXMgYWxpZ25zIHdpdGggdGhlIGNvbmNlcHQgb2YgbGVhcm5pbmcgYmVoYXZpb3IuXFxuXFxuKipPcHRpb24gKGIpIENvbXBldGluZyBmb3IgcmVzb3VyY2VzKio6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIHdoaWxlIGNhdHMgbWF5IGNvbXBldGUgZm9yIHJlc291cmNlcyBsaWtlIGZvb2QgaW4gdGhlIHdpbGQsIHRoZSBiZWhhdmlvciBvZiBodW50aW5nIGtpdHRlbnMgaXMgbW9yZSBhYm91dCBsZWFybmluZyBhIHNraWxsIHRoYW4gY29tcGV0aW5nIGZvciByZXNvdXJjZXMuIEl0J3Mgbm90IHByaW1hcmlseSBhYm91dCB3aG8gZ2V0cyB3aGF0LlxcblxcbioqT3B0aW9uIChjKSBXYXJtLWJsb29kZWQgKGQpIENvbXBldGl0aW9uKio6IFRoZXNlIG9wdGlvbnMgYXJlIG5vdCBjb3JyZWN0IGFzIHRoZXkgZGVzY3JpYmUgY2hhcmFjdGVyaXN0aWNzIG9yIGJyb2FkZXIgY29udGV4dHMgXFx1MjAxMyB3YXJtLWJsb29kZWQgcmVmZXJzIHRvIHRoZSBwaHlzaW9sb2dpY2FsIHRyYWl0IG9mIGJlaW5nIGFibGUgdG8gcmVndWxhdGUgYm9keSB0ZW1wZXJhdHVyZSwgYW5kIGNvbXBldGl0aW9uIGNvdWxkIGFwcGx5IG1vcmUgYnJvYWRseSB0byBzaXR1YXRpb25zIGludm9sdmluZyBjb25mbGljdHMgYmV0d2VlbiBvciBhbW9uZyBpbmRpdmlkdWFscyBvciBncm91cHMgY2hhc2luZyB0aGUgc2FtZSBnb2FsLCB3aGljaCBpcyBub3Qgc3BlY2lmaWNhbGx5IHJlbGV2YW50IHRvIGEga2l0dGVuIHByYWN0aWNpbmcgaHVudGluZy5cXG5cXG4qKk9wdGlvbiAoZSkgQmFkIGJlaGF2aW9yKio6IFRoaXMgb3B0aW9uIGlzIGluYWNjdXJhdGUuIFdoaWxlIGh1bnRpbmcgYmVoYXZpb3IgbWlnaHQgdG8gYSBodW1hbiBvYnNlcnZlciBzZWVtIGhhcm1mdWwgKGUuZy4sIGEga2l0dGVuIHBvdW5jaW5nIG9uIGEgdG95IG1vdXNlKSwgaXQgaXMgZXNzZW50aWFsIGFuZCBpbnN0aW5jdHVhbCBmb3IgdGhlIGtpdHRlbidzIHN1cnZpdmFsIGFuZCBkb2VzIG5vdCBxdWFsaWZ5IGFzICdiYWQnIGluIGFuIGV0aGljYWwgc2Vuc2UuXFxuXFxuKipPcHRpb24gKGYpIExlYXJuaW5nIG5vdGhpbmcqKjogVGhpcyBpcyBpbmNvcnJlY3QgYmVjYXVzZSBraXR0ZW5zIGFyZSBhY3RpdmVseSBpbnZvbHZlZCBpbiBsZWFybmluZyB0aHJvdWdoIHBsYXksIGFuZCBodW50aW5nIG1pbWljcyByZWFsLWxpZmUgc2NlbmFyaW9zIHdoZXJlIHRoZXkgZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHByZXkuXFxuXFxuKipPcHRpb24gKGcpIEV4dGluZ3Vpc2hpbmcgYmVoYXZpb3IqKjogVGhpcyBvcHRpb24gaXMgbm90IGFwcGxpY2FibGUuICdFeHRpbmd1aXNoaW5nIGJlaGF2aW9yJyB1c3VhbGx5IHJlZmVycyB0byBhY3Rpb25zIHRha2VuIHRvIHByZXZlbnQgb3IgZW5kIGEgYmVoYXZpb3IsIHdoaWNoIGlzIG5vdCB3aGF0IGtpdHRlbnMgYXJlIGRvaW5nIHdoaWxlIHByYWN0aWNpbmcgaHVudGluZy4gXFxuXFxuKipPcHRpb24gKGgpIEVuZXJneSBvZiBtb3Zpbmcgb2JqZWN0cyoqOiBUaGlzIGlzIGFsc28gbm90IGNvcnJlY3QgYXMgaXQgaXMgYSBwaHlzaWNhbCBjb25jZXB0IGRlc2NyaWJpbmcga2luZXRpYyBlbmVyZ3kuIFdoaWxlIGh1bnRpbmcgZG9lcyBpbnZvbHZlIHBoeXNpY2FsIGFjdGl2aXR5IHRoYXQgY29uc3VtZXMgZW5lcmd5LCBpdCBkb2Vzbid0IGFjY3VyYXRlbHkgY2FwdHVyZSBvciBkZXNjcmliZSB0aGUga2l0dGVucycgYmVoYXZpb3IgaW4gdGhpcyBjb250ZXh0LlxcblxcbkluIHN1bW1hcnksIHRoZSBjb3JyZWN0IGFuc3dlciBpcyAnTGVhcm5pbmcgYmVoYXZpb3InIChhKSBiZWNhdXNlIGtpdHRlbnMgaHVudGluZyBpcyBhIGZvcm0gb2YgcGxheSB3aGVyZSB0aGV5IGxlYXJuIGNydWNpYWwgc2tpbGxzIG5lZWRlZCBmb3Igc3Vydml2YWwuIFRoZSBvdGhlciBvcHRpb25zIGFyZSBub3QgY29ycmVjdCBhcyB0aGV5IGVpdGhlciBkbyBub3QgZGlyZWN0bHkgZGVzY3JpYmUgdGhlIGJlaGF2aW9yIG9yIG1pc2ludGVycHJldCB0aGUgY29udGV4dCBvciBtZWFuaW5nIG9mIHRoZSBraXR0ZW4ncyBhY3Rpb25zLlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICIxNSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IERlYWQgb3JnYW5pc21zIGNhbiBjcmVhdGUgZW5lcmd5IGFmdGVyIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEJ1cm5pbmcgKGIpIFdpbnRlciAoYykgTXV0YXRpb25zIChkKSBDb29raW5nIChlKSBDeWNsZXMgKGYpIFN1bW1lciAoZykgRnJlZXppbmcgKGgpIEd1bnNob3RzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJBbnN3ZXI6IChhKSBCdXJuaW5nXFxuXFxuRXhwbGFuYXRpb246IFxcbi0gKGIpIFdpbnRlcjogV2ludGVyIGlzIGEgc2Vhc29uIGNoYXJhY3Rlcml6ZWQgYnkgY29sZCB0ZW1wZXJhdHVyZXMgYW5kIHRoZSBhYnNlbmNlIG9mIHN1bmxpZ2h0LiBJdCBoYXMgbm8gZGlyZWN0IHJlbGF0aW9uc2hpcCB3aXRoIGVuZXJneSBwcm9kdWN0aW9uIGFmdGVyIGRlYXRoLlxcblxcbi0gKGMpIE11dGF0aW9uczogTXV0YXRpb25zIGFyZSBjaGFuZ2VzIGluIEROQSB0aGF0IGNhbiBsZWFkIHRvIGdlbmV0aWMgdmFyaWF0aW9ucy4gVGhleSBvY2N1ciBpbiBsaXZpbmcgb3JnYW5pc21zIGFuZCBkb24ndCBhcHBseSB0byBkZWFkIG9yZ2FuaXNtcyBzdGFydGVkIGdlbmVyYXRpbmcgbmV3IGVuZXJneS5cXG5cXG4tIChkKSBDb29raW5nOiBUaGlzIGlzIGEgcHJvY2VzcyBvZiBwcmVwYXJpbmcgZm9vZCB1c2luZyBoZWF0LiBJdCdzIGEgbWV0aG9kIG5vdCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBlbmVyZ3kgZ2VuZXJhdGlvbiBhZnRlciBhbiBvcmdhbmlzbSdzIGRlYXRoLlxcblxcbi0gKGUpIEN5Y2xlczogV2hpbGUgY2VydGFpbiBiaW9sb2dpY2FsIHByb2Nlc3NlcyBsaWtlIHRoZSBjYXJib24gY3ljbGUgaW52b2x2ZSB0aGUgdHJhbnNmb3JtYXRpb24gb2Ygb3JnYW5pYyBtYXR0ZXIsIHRoZXNlIGN5Y2xlcyB0YWtlIHRpbWUgYW5kIG9jY3VyIG5hdHVyYWxseSB3aXRoaW4gdGhlIGVjb3N5c3RlbS4gVGhleSBkbyBub3QgcmVsYXRlIGRpcmVjdGx5IHRvIHRoZSBpbW1lZGlhdGUgZ2VuZXJhdGlvbiBvZiBlbmVyZ3kgcG9zdC1kZWF0aC5cXG5cXG4tIChmKSBTdW1tZXI6IFNpbWlsYXIgdG8gd2ludGVyLCBzdW1tZXIgaXMganVzdCBhbm90aGVyIHNlYXNvbiB3aXRoIHdhcm0gY29uZGl0aW9ucyBhbmQgbW9yZSBzdW5saWdodC4gSXQgZG9lcyBub3QgZGVzY3JpYmUgYSBwcm9jZXNzIHRoYXQgcHJvZHVjZXMgZW5lcmd5IGZyb20gZGVhZCBvcmdhbmlzbXMuXFxuXFxuLSAoZykgRnJlZXppbmc6IEZyZWV6aW5nIGlzIGEgcHJvY2VzcyB0aGF0IGNhbiBwcmVzZXJ2ZSBiaW9sb2dpY2FsIHRpc3N1ZXMgYnV0IGRvZXMgbm90IGdlbmVyYXRlIGVuZXJneSBvbmNlIGFuIG9yZ2FuaXNtIGlzIGRlYWQuXFxuXFxuLSAoaCkgR3Vuc2hvdHM6IFRoaXMgdW5yZWxhdGVkIG9wdGlvbiByZWZlcnMgdG8gYSBzb3VyY2Ugb2YgcGh5c2ljYWwgaW1wYWN0IG9yIHNvdW5kLCBub3QgZW5lcmd5IHByb2R1Y3Rpb24gYnkgZGVhZCBvcmdhbmlzbXMuXFxuXFxuSW4gcmVhbGl0eSwgZGVhZCBvcmdhbmlzbXMgY2FuIGluZGlyZWN0bHkgY29udHJpYnV0ZSB0byBlbmVyZ3kgY3JlYXRpb24gdGhyb3VnaCBkZWNvbXBvc2l0aW9uLCBhIG5hdHVyYWwgcHJvY2VzcyB3aGVyZSBkZWNvbXBvc2VycyBsaWtlIGJhY3RlcmlhIGFuZCBmdW5naSBicmVhayBkb3duIG9yZ2FuaWMgbWF0ZXJpYWwsIHJlbGVhc2luZyBudXRyaWVudHMgYmFjayBpbnRvIHRoZSBlY29zeXN0ZW0uIEhvd2V2ZXIsIHRoaXMgcHJvY2VzcyBkb2Vzbid0IGZhbGwgdW5kZXIgdGhlIGxpdGVyYWwgaW50ZXJwcmV0YXRpb24gb2YgJ0RlYWQgb3JnYW5pc21zIGNhbiBjcmVhdGUgZW5lcmd5IGFmdGVyIHdoYXQ/Jy4gVGhlcmVmb3JlLCB0aGUgY2xvc2VzdCBhbmQgY29uY2VwdHVhbGx5IHJlbGV2YW50IGFuc3dlciB3b3VsZCBiZSB0byBidXJuIG9yIGRlY29tcG9zZSwgYnV0IHNpbmNlICdCdXJuaW5nJyBpbiB0aGUgY29udGV4dCBvZiBiaW9sb2dpY2FsIHByb2Nlc3NlcyB1c3VhbGx5IGRvZXNuJ3QgcmVmZXIgdG8gdGhlIG5hdHVyYWwgZGVjb21wb3NpbmcgcHJvY2VzcyBvZiBkZWFkIG9yZ2FuaXNtcywgb3B0aW9uIChhKSBhcyBwcmVzZW50ZWQgaW4gdGhlIGNob2ljZXMgaXMgbm90IHRlY2huaWNhbGx5IGNvcnJlY3QuIFxcblxcblRoZSBsYWlkLW91dCBleHBsYW5hdGlvbiBmb3Igd2h5IHRoZSBvdGhlciBvcHRpb25zIGFyZSBub3QgY29ycmVjdCBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aHkgJ0J1cm5pbmcnIGlzbid0IHRoZSBwcmVjaXNlIGFuc3dlciBpbiB0aGUgY29udGV4dCBnaXZlbiwgZGVzcGl0ZSBiZWluZyB0aGUgY2xvc2VzdCB0byB0aGUgYWN0dWFsIG5hdHVyYWwgcHJvY2VzcyBpbnZvbHZpbmcgZGVhZCBvcmdhbmlzbXMgY3JlYXRpbmcgZW5lcmd5LlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICIxNiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIHJlYXNvbmluZyBhbmQgdGhlIGZpbmFsIGFuc3dlciBpbiBhIGpzb24gbGlrZToge1wicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj4sIFwiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFR1cm5pbmcgb24gd2hhdCB3aWxsIGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgVmVoaWNsZXMgKGIpIFNhdGVsbGl0ZXMgKGMpIExpZ2h0IGJ1bGIgKGQpIEJ1c2VzIChlKSBGaXJlY3JhY2tlcnMgKGYpIFNlbnNvcnkgbmV1cm9ucyAoZykgQW4gb2JqZWN0IChoKSBFbmdpbmVzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIoYSkgVmVoaWNsZXM6IFdoaWxlIHZlaGljbGVzLCBpbiBnZW5lcmFsLCBjb250YWluIGRldmljZXMgdGhhdCBtYXkgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIChsaWtlIGVuZ2luZSBpZ25pdGlvbiBzeXN0ZW1zKSwgdGhleSBhcmUgbm90IHRoZSBwcmltYXJ5IG1lYW5zIG9mIGVtaXR0aW5nIHN1Y2ggcmFkaWF0aW9uIGludGVudGlvbmFsbHkuXFxuXFxuKGIpIFNhdGVsbGl0ZXM6IFNpbWlsYXIgdG8gdmVoaWNsZXMsIHNhdGVsbGl0ZXMgbWF5IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiAoZm9yIGNvbW11bmljYXRpb24sIG5hdmlnYXRpb24sIGV0Yy4pLCBidXQgdGhleSBhcmUgbm90IHRoZSBtYWluIHRvb2xzIHVzZWQgZm9yIGVtaXR0aW5nIHRoaXMgcmFkaWF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgcHVycG9zZS5cXG5cXG4oYykgTGlnaHQgYnVsYjogVGhpcyBpcyB0aGUgY29ycmVjdCBhbnN3ZXIgYXMgaXQgZW1pdHMgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBmb3JtIG9mIGxpZ2h0LCB3aGVuIGVsZWN0cmljaXR5IHBhc3NlcyB0aHJvdWdoIHRoZSBmaWxhbWVudC5cXG5cXG4qKkV4cGxhbmF0aW9uIGZvciAoYyk6KiogQSBsaWdodCBidWxiIGZ1bmN0aW9ucyBieSBwYXNzaW5nIGFuIGVsZWN0cmljIGN1cnJlbnQgdGhyb3VnaCBhIGNvbmR1Y3RvciBjYWxsZWQgYSBmaWxhbWVudC4gVGhlIHJlc2lzdGFuY2Ugb2YgdGhlIGZpbGFtZW50IGNhdXNlcyBpdCB0byBoZWF0IHVwIGFuZCBnbG93LCBlbWl0dGluZyBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLCBwcmltYXJpbHkgaW4gdGhlIHZpc2libGUgc3BlY3RydW0gKGxpZ2h0KS5cXG5cXG4oZCkgQnVzZXM6IExpa2UgdmVoaWNsZXMsIGJ1c2VzIG1pZ2h0IGNvbnRhaW4gZGV2aWNlcyB0aGF0IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiwgYnV0IHRoZXkgYXJlIG5vdCB0aGUgcHJpbWFyeSB0b29sIGZvciB0aGlzIGVtaXNzaW9uLlxcblxcbihlKSBGaXJlY3JhY2tlcnM6IFdoaWxlIHRoZXkgZG8gZW1pdCBsaWdodCBhbmQgaGVhdCAod2hpY2ggYXJlIHR5cGVzIG9mIGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24pLCB0aGV5IGFyZSBub3QgYSBkZWxpYmVyYXRlIG1ldGhvZCBmb3IgZ2VuZXJhdGluZyBlbGVjdHJvbWFnbmV0aWMgd2F2ZXMuXFxuXFxuKGYpIFNlbnNvcnkgbmV1cm9uczogTmV1cm9ucywgaW5jbHVkaW5nIHNlbnNvcnkgbmV1cm9ucywgY2FycnkgZWxlY3RyaWNhbCBzaWduYWxzIHJlbGF0ZWQgdG8gc2Vuc29yeSBpbnB1dCBhbmQgZG8gbm90IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiBpbiB0aGUgYnJvYWQgc2Vuc2UgcmVxdWlyZWQgYnkgdGhlIHF1ZXN0aW9uLlxcblxcbihnKSBBbiBvYmplY3Q6IFRoaXMgaXMgdG9vIHZhZ3VlIHRvIHByb3ZpZGUgYSBjb3JyZWN0IGFuc3dlci4gTm90IGFsbCBvYmplY3RzIGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiBpbiB0aGUgd2F5IHRoZSBxdWVzdGlvbiBpcyBhc2tpbmcuXFxuXFxuKGgpIEVuZ2luZXM6IFNpbWlsYXIgdG8gdmVoaWNsZXMsIGVuZ2luZXMgY29udGFpbiBkZXZpY2VzIHRoYXQgbWF5IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiBkdXJpbmcgb3BlcmF0aW9uLCBzdWNoIGFzIGluIGlnbml0aW9uIHN5c3RlbXMsIGJ1dCB0aGlzIGlzIG5vdCB0aGUgcHJpbWFyeSBtZXRob2Qgb2YgZW1pdHRpbmcgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi5cXG5cXG5JbiBzdW1tYXJ5LCB0aGUgb25seSBvcHRpb24gZGlyZWN0bHkgZGVzaWduZWQgdG8gZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIGFzIGludGVuZGVkIGJ5IHRoZSBxdWVzdGlvbiBpcyAoYykgTGlnaHQgYnVsYi5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJjXCJ9In1dLCAiMTciOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGVyZSBpcyBhIHp5Z290ZSBmb3JtZWQgYnkgc3Blcm0gc3dpbW1pbmcgdG8gYW4gZWdnP1xuQW5zd2VyIENob2ljZXM6IChhKSBDb2xkZXIgYW5kIHdldHRlciAoYikgT2NlYW4gd2F0ZXIgKGMpIEdyYXB0b2xpdGVzIChkKSBSYXBpZCBleHBhbnNpb24gKGUpIEEgZGVsdGEgKGYpIEFuIGFyY2hlZ29uaXVtIChnKSBCYXJuYWNsZXMgKGgpIEFuIG9yZ2FuaXNtJ3MgYm9keSJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wicmVhc29uaW5nXCI6IFwiTGV0J3MgYW5hbHl6ZSBlYWNoIG9wdGlvbjpcXG5cXG4oYSkgQ29sZGVyIGFuZCB3ZXR0ZXI6IFRoaXMgcGhyYXNlIGRlc2NyaWJlcyBhbiBlbnZpcm9ubWVudCwgYnV0IGl0IGRvZXNuJ3Qgc3BlY2lmeSB3aGVyZSBhIHp5Z290ZSBpcyBmb3JtZWQuIFp5Z290ZXMgYXJlIG5vdCBzcGVjaWZpY2FsbHkgZm9ybWVkIGluIGNvbGRlciBhbmQgd2V0dGVyIGVudmlyb25tZW50czsgcmF0aGVyLCB0aGV5IGFyZSBmb3JtZWQgaW4gcmVwcm9kdWN0aXZlIHN5c3RlbXMgb2Ygb3JnYW5pc21zLlxcblxcbihiKSBPY2VhbiB3YXRlcjogV2hpbGUgZWdncyBhbmQgc3Blcm0gZnJvbSBjZXJ0YWluIG1hcmluZSBvcmdhbmlzbXMgY2FuIGJlIGZvdW5kIGluIG9jZWFuIHdhdGVyIGFuZCBmZXJ0aWxpemF0aW9uIGNhbiBvY2N1ciB0aGVyZSwgdGhpcyBkb2Vzbid0IGFkZHJlc3MgdGhlIGZvcm1hdGlvbiBvZiBhIHp5Z290ZS4gVGhlIHp5Z290ZSBpdHNlbGYgaXMgdGhlIHJlc3VsdCBvZiBmZXJ0aWxpemF0aW9uLCB3aGljaCBvY2N1cnMgd2l0aGluIHRoZSByZXByb2R1Y3RpdmUgc3lzdGVtcyBvZiB0aGUgb3JnYW5pc21zLlxcblxcbihjKSBHcmFwdG9saXRlczogR3JhcHRvbGl0ZXMgYXJlIGFuIGV4dGluY3QgZ3JvdXAgb2YgY29sb25pYWwgYW5pbWFscywgc3BlY2lmaWNhbGx5LCB0aGV5IHdlcmUgYSB0eXBlIG9mIFBhbGVvem9pYyBtYXJpbmUgaW52ZXJ0ZWJyYXRlLiBaeWdvdGUgZm9ybWF0aW9uIGlzIG5vdCBkaXJlY3RseSBsaW5rZWQgdG8gZ3JhcHRvbGl0ZXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGl0LiBaeWdvdGUgZm9ybWF0aW9uIGhhcHBlbnMgd2l0aGluIHRoZSByZXByb2R1Y3RpdmUgc3lzdGVtcyBvZiBsaXZpbmcgb3JnYW5pc21zLlxcblxcbihkKSBSYXBpZCBleHBhbnNpb246IFRoaXMgcmVzZW1ibGVzIGEgcGh5c2ljYWwgcHJvY2VzcyBidXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IHNwZWNpZmljIGxvY2F0aW9uIGZvciB6eWdvdGUgZm9ybWF0aW9uLiBJdCdzIGEgY2hhcmFjdGVyaXN0aWMgb2YgZ3Jvd3RoIG9yIGV4cGFuc2lvbiwgbm90IGEgbG9jYXRpb24uXFxuXFxuKGUpIEEgZGVsdGE6IEEgZGVsdGEgaXMgYSBsYW5kZm9ybSBjcmVhdGVkIGJ5IHNlZGltZW50YXJ5IGRlcG9zaXRzIGF0IHRoZSBtb3V0aCBvZiBhIHJpdmVyIHdoZXJlIGl0IG1lZXRzIGEgbGFyZ2VyIGJvZHkgb2Ygd2F0ZXIuIFRoaXMgZ2VvZ3JhcGhpY2FsIGZlYXR1cmUgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZC5cXG5cXG4oZykgQmFybmFjbGVzOiBCYXJuYWNsZXMgYXJlIG1hcmluZSBjcnVzdGFjZWFucywgYnV0IHRoZWlyIHJlcHJvZHVjdGlvbiBtZXRob2QgKGV4dGVybmFsIGZlcnRpbGl6YXRpb24pIGFuZCB0aGUgc3BlY2lmaWMgbG9jYXRpb24gb2Ygenlnb3RlIGZvcm1hdGlvbiAod2l0aGluIHRoZSByZXByb2R1Y3RpdmUgc3lzdGVtIG9mIHRoZSBiYXJuYWNsZSkgYXJlIG5vdCB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgbW9zdCBvdGhlciBhbmltYWxzLiBGdXJ0aGVybW9yZSwgdGhlIHF1ZXN0aW9uIGRvZXNuJ3Qgc3BlY2lmeSB0aGUgb3JnYW5pc20gdHlwZSwgdGhlcmVieSBsZWFkaW5nIHRoaXMgYXMgYW4gaW5jb3JyZWN0IGNob2ljZSB3aXRob3V0IHRoYXQgYXNzdW1wdGlvbi5cXG5cXG4oaCkgQW4gb3JnYW5pc20ncyBib2R5OiBUaGlzIGlzIGEgdmFndWUgb3B0aW9uIHRoYXQgY292ZXJzIGEgd2lkZSByYW5nZSBvZiBlbnZpcm9ubWVudHMgd2l0aGluIGFuIG9yZ2FuaXNtJ3MgYm9keS4gV2hpbGUgdGhpcyBpcyBicm9hZGx5IGNvcnJlY3QsIGl0J3Mgbm90IHNwZWNpZmljIGVub3VnaCwgYW5kIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gYSBzcGVjaWZpYyBpbnN0YW5jZSAobGlrZSB3aXRoaW4gYW4gZWdnKS5cXG5cXG5Ob3csIGxldCdzIGV4YW1pbmUgKGYpIGFuIGFyY2hlZ29uaXVtLlxcblxcbkFuIGFyY2hlZ29uaXVtIGlzIGEgdHlwZSBvZiBzcGVjaWFsaXplZCByZXByb2R1Y3RpdmUgc3RydWN0dXJlIGZvdW5kIGluIG5vbi12YXNjdWxhciBwbGFudHMgKHN1Y2ggYXMgbW9zc2VzKSBhbmQgc29tZSBhbGdhZS4gSW5zaWRlIHRoZSBhcmNoZWdvbml1bSwgYSBmZW1hbGUgZ2FtZXRlIChlZ2cpIGlzIGZvcm1lZCwgYW5kIGZlcnRpbGl6YXRpb24gb2NjdXJzIHdoZW4gYSBzcGVybSBmcm9tIGFub3RoZXIgbWFsZSBnYW1ldGUgZW50ZXJzLiBUaGUgcmVzdWx0aW5nIHByb2R1Y3Qgb2YgdGhpcyBmZXJ0aWxpemF0aW9uIGlzIGEgenlnb3RlLiBcXG5cXG5JbiBzdW1tYXJ5LCAoZikgaXMgdGhlIG1vc3QgYWNjdXJhdGUgYW1vbmcgdGhlIG9wdGlvbnMgcHJvdmlkZWQgYXMgaXQgc3BlY2lmaWNhbGx5IGRlbm90ZXMgdGhlIGxvY2F0aW9uIHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZDogaW5zaWRlIGFuIGFyY2hlZ29uaXVtIHdpdGhpbiBhIGZlbWFsZSByZXByb2R1Y3RpdmUgdHJhY3Qgb2YgY2VydGFpbiBwbGFudHMuIEl0IGlzIHNwZWNpZmljLCBiaW9sb2dpY2FsLCBhbmQgYW5hdG9taWNhbGx5IGNvcnJlY3Qgd2l0aGluIHRoZSBjb250ZXh0IG9mIHBsYW50IHJlcHJvZHVjdGlvbi5cIiwgXCJmaW5hbF9hbnN3ZXJcIjogXCJmXCJ9In1dLCAiMTgiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciByZWFzb25pbmcgYW5kIHRoZSBmaW5hbCBhbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+LCBcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGNhbiBjYXVzZSBoYXJtIHRvIHRoZSBleWVzP1xuQW5zd2VyIENob2ljZXM6IChhKSBNaWxkZXcgKGIpIE5vcm1hbCB3YXRlciAoYykgSGVycGVzIChkKSBOb3JtYWwgYWlyIChlKSBDb2FsIChmKSBNb2xkIChnKSBBY2lkIChoKSBDb250YWN0IHNvbHV0aW9uIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCJUaGUgY29ycmVjdCBhbnN3ZXIgaXMgJ2cpIEFjaWQnIGJlY2F1c2UgaXQgY2FuIGNhdXNlIGNoZW1pY2FsIGJ1cm5zLCB0aXNzdWUgZGFtYWdlLCBhbmQgb3RoZXIgc2VyaW91cyBpbmp1cmllcyB0byB0aGUgZXllcyB3aGVuIGl0IGNvbWVzIGludG8gY29udGFjdCB3aXRoIHRoZSBleWVzLiBcXG5cXG5MZXQncyBnbyB0aHJvdWdoIHRoZSBpbmNvcnJlY3QgYW5zd2VycyBhbmQgZXhwbGFpbiB3aHkgdGhleSdyZSBub3QgY29ycmVjdDpcXG5cXG4oYSkgTWlsZGV3OiBNaWxkZXcgaXMgYSB0eXBlIG9mIGZ1bmd1cyB0aGF0IHRocml2ZXMgaW4gZGFtcCBlbnZpcm9ubWVudHMuIFdoaWxlIGl0IGNhbiBjYXVzZSBhbGxlcmdpYyByZWFjdGlvbnMgaW4gc29tZSBwZW9wbGUsIGl0IGRvZXMgbm90IGRpcmVjdGx5IGhhcm0gdGhlIGV5ZXMuXFxuXFxuKGIpIE5vcm1hbCB3YXRlcjogTm9ybWFsIHdhdGVyIGlzIGVzc2VudGlhbCBmb3IgbGlmZSBhbmQgZG9lcyBub3QgcG9zZSBoYXJtIHRvIGV5ZXMuIEluIGZhY3QsIGl0J3MgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgZXllIGhlYWx0aCBieSBrZWVwaW5nIHRoZW0gY2xlYW4gYW5kIG1vaXN0LlxcblxcbihjKSBIZXJwZXM6IFdoaWxlIGl0IGNhbiBhZmZlY3QgdGhlIHNraW4gYXJvdW5kIHRoZSBleWVzIGFuZCBjYXVzZSBjb25kaXRpb25zIGxpa2UgSGVycGVzIFNpbXBsZXggVmlydXMga2VyYXRpdGlzLCBpdCBpc24ndCBpbmhlcmVudGx5IGhhcm1mdWwgdG8gdGhlIGV5ZXMgaW4gYSBkaXJlY3QgbWFubmVyIGxpa2UgYWNpZC4gVGhlIGhhcm0gY29tZXMgZnJvbSBjb21wbGljYXRpb25zIG9yIHNlY29uZGFyeSBiYWN0ZXJpYWwgaW5mZWN0aW9ucyB3aGVuIHRoZSB2aXJ1cyBhZmZlY3RzIHRoZSBleWVzLlxcblxcbihkKSBOb3JtYWwgYWlyOiBBaXIsIGFzIGxvbmcgYXMgaXQncyBicmVhdGhhYmxlIGFuZCBmcmVlIGZyb20gY29udGFtaW5hbnRzLCBkb2VzIG5vdCBwb3NlIGFueSByaXNrIHRvIHRoZSBleWVzLiBJdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGV5ZXMgdG8gZnVuY3Rpb24gcHJvcGVybHkuXFxuXFxuKGUpIENvYWw6IENvYWwsIGEgY29tcG9zaXRlIG9mIG9yZ2FuaWMgbWF0ZXJpYWxzLCBkb2Vzbid0IGRpcmVjdGx5IGhhcm0gdGhlIGV5ZXMuIEhvd2V2ZXIsIGV4cG9zdXJlIHRvIGNvYWwgZHVzdCBjYW4gbGVhZCB0byByZXNwaXJhdG9yeSBpc3N1ZXMsIHdoaWNoIGluZGlyZWN0bHkgYWZmZWN0IGV5ZSBoZWFsdGguXFxuXFxuKGYpIE1vbGQ6IFNpbWlsYXIgdG8gbWlsZGV3LCBtb2xkIGNhbiBjYXVzZSBhbGxlcmdpZXMgYW5kIHJlc3BpcmF0b3J5IHByb2JsZW1zIGJ1dCBkb2Vzbid0IGRpcmVjdGx5IGhhcm0gdGhlIGV5ZXMuIEl0J3MgdGhlIGFpcmJvcm5lIHNwb3JlcyBhbmQgcmVhY3RpdmUgY29tcG91bmRzIHRoYXQgY2FuIGJlIHByb2JsZW1hdGljLlxcblxcbihoKSBDb250YWN0IHNvbHV0aW9uOiBUeXBpY2FsbHksIGEgY29udGFjdCBzb2x1dGlvbiBpcyBkZXNpZ25lZCB0byBiZSBzYWZlIGZvciB1c2Ugd2l0aCBjb250YWN0IGxlbnNlcyBhbmQgZG9lc24ndCBoYXJtIHRoZSBleWVzIGlmIHVzZWQgY29ycmVjdGx5LiBBbnkgcG90ZW50aWFsIGhhcm0gd291bGQgYmUgYSByZXN1bHQgb2YgaW1wcm9wZXIgdXNlIG9yIGNvbnRhbWluYXRpb24uXFxuXFxuSW4gc3VtbWFyeSwgd2hpbGUgYWxsIHRoZSBvcHRpb25zIGNhbiBwb3RlbnRpYWxseSBjYXVzZSBpbmRpcmVjdCBoYXJtIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMsICdnKSBBY2lkJyBkaXJlY3RseSBhbmQgYWN1dGVseSBoYXJtcyB0aGUgZXllcywgbWFraW5nIGl0IHRoZSBjb3JyZWN0IGFuc3dlciB0byB0aGUgcXVlc3Rpb24uXCIsIFwiZmluYWxfYW5zd2VyXCI6IFwiZ1wifSJ9XSwgIjE5IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgcmVhc29uaW5nIGFuZCB0aGUgZmluYWwgYW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPiwgXCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBmb3JtcyBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQmFtYm9vIChiKSBEZXNpY2NhdGlvbiAoYykgQnVycnMgKGQpIEVsbXMgKGUpIE1vc3MgKGYpIENvYWwgKGcpIENhbmR5IChoKSBNZWF0In0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJyZWFzb25pbmdcIjogXCIxLiBSZWFkaW5nIHRoZSBxdWVzdGlvbiBhbmQgb3B0aW9uczogV2UgYXJlIGFza2VkIHdoYXQgZm9ybXMgaW50byBwZWF0IHRocm91Z2ggZXh0cmVtZSBoZWF0IGFuZCBwcmVzc3VyZSBvdmVyIHRpbWUuXFxuXFxuMi4gSWRlbnRpZnlpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIG9wdGlvbnM6IFxcbiAgIC0gQmFtYm9vLCBEZXNpY2NhdGlvbiwgQnVycnMsIEVsbXMsIENvYWwsIENhbmR5LCBhbmQgTWVhdCBhcmUgYWxsIGRpZmZlcmVudCBvcmdhbmljIG1hdHRlciwgYnV0IG5vdCBhbGwgb2YgdGhlbSBmb3JtIHBlYXQgdW5kZXIgdGhlIG1lbnRpb25lZCBjb25kaXRpb25zLlxcblxcbjMuIERldGVybWluaW5nIHdoaWNoIG9wdGlvbnMgYXJlIG5vdCBsb2dpY2FsOlxcbiAgIC0gKGEpIEJhbWJvbzogV2hpbGUgYmFtYm9vIGlzIGEgcGxhbnQsIGl0IHR5cGljYWxseSBncm93cyBpbiByZWxhdGl2ZWx5IG1pbGQgY29uZGl0aW9ucyBhbmQgZG9lcyBub3QgdHJhbnNmb3JtIGludG8gcGVhdCB1bmRlciBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlLlxcbiAgIC0gKGIpIERlc2ljY2F0aW9uOiBUaGlzIHJlZmVycyB0byB0aGUgcHJvY2VzcyBvZiBkcnlpbmcgb3V0IGFuZCBpcyBub3QgYSBkaXJlY3QgY29udHJpYnV0b3IgdG8gdGhlIGZvcm1hdGlvbiBvZiBwZWF0LiBJdCBkb2Vzbid0IGludm9sdmUgdGhlIG5lY2Vzc2FyeSBoZWF0IGFuZCBwcmVzc3VyZS5cXG4gICAtIChjKSBCdXJyczogQnVycnMgYXJlIHNtYWxsIHNlZWQgYmFsbHMgYXR0YWNoZWQgdG8gcGxhbnRzLCBwcmltYXJpbHkgdXNlZCBieSBwbGFudHMgZm9yIGRpc3BlcnNhbC4gVGhleSBkb24ndCBmb3JtIHBlYXQuXFxuICAgLSAoZCkgRWxtczogVGhlc2UgYXJlIHRyZWVzIGNvbW1vbmx5IGZvdW5kIGluIHRlbXBlcmF0ZSByZWdpb25zLiBUaGV5IGNhbiBkZWNvbXBvc2Ugb3ZlciB0aW1lIGJ1dCBkbyBub3QgZm9ybSBwZWF0IHVuZGVyIG5vcm1hbCBvciBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlLlxcbiAgIC0gKGUpIE1vc3M6IFRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyLiBNb3NzIGlzIGEgdHlwZSBvZiBub24tdmFzY3VsYXIgbGFuZCBwbGFudCB0aGF0IGdyb3dzIGluIGRhbXAgZW52aXJvbm1lbnRzLiBPdmVyIGxvbmcgcGVyaW9kcywgdW5kZXIgY29uZGl0aW9ucyBvZiBoaWdoIHByZXNzdXJlIGFuZCBzbG93bHkgZGVjb21wb3NpbmcgaW4gd2F0ZXItcmljaCBlbnZpcm9ubWVudHMsIG1vc3MgY29udHJpYnV0ZXMgdG8gdGhlIGZvcm1hdGlvbiBvZiBwZWF0LlxcbiAgIC0gKGYpIENvYWw6IENvYWwgZm9ybXMgZnJvbSB0aGUgcmVtYWlucyBvZiBwbGFudHMgdW5kZXIgaW50ZW5zZSBoZWF0IGFuZCBwcmVzc3VyZSBkZWVwIHdpdGhpbiB0aGUgRWFydGgncyBjcnVzdCwgYnV0IGl0IGRvZXNuJ3QgZm9ybSBwZWF0LiBQZWF0IGFuZCBjb2FsIGFyZSBkaXN0aW5jdCBnZW9sb2dpY2FsIGZvcm1hdGlvbnMuXFxuICAgLSAoZykgQ2FuZHk6IFRoaXMgaXMgbm90IG9yZ2FuaWMgbWF0dGVyIHRoYXQgY2FuIHRyYW5zZm9ybSBpbnRvIHBlYXQuIEl0J3MgYSBwcm9jZXNzZWQgZm9vZCBwcm9kdWN0LlxcbiAgIC0gKGgpIE1lYXQ6IE1lYXQgZG9lcyBub3QgZm9ybSBwZWF0LiBJdCBkZWNvbXBvc2VzIGluIGEgZGlmZmVyZW50IG1hbm5lciBhbmQgZG9lc24ndCBjb250cmlidXRlIGRpcmVjdGx5IHRvIHBlYXQgZm9ybWF0aW9uLlxcblxcbjQuIFByb3ZpZGluZyBleHBsYW5hdGlvbnMgZm9yIGluY29ycmVjdCBhbnN3ZXJzOlxcbiAgIC0gQmFtYm9vLCBCdXJycywgRWxtcywgQ2FuZHksIGFuZCBNZWF0IFxcdTIwMTMgVGhlc2Ugb3B0aW9ucyBhcmUgZWl0aGVyIG5vdCBwbGFudHMgb3IgZm9ybXMgb2Ygb3JnYW5pYyBtYXR0ZXIgdGhhdCBkb24ndCB1bmRlcmdvIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIChleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlKSByZXF1aXJlZCB0byBmb3JtIHBlYXQuXFxuICAgLSBEZXNpY2NhdGlvbiBcXHUyMDEzIFRoaXMgcHJvY2VzcyBpcyB0aGUgcmVtb3ZhbCBvZiBtb2lzdHVyZSBmcm9tIGEgc3Vic3RhbmNlLCB3aGljaCBkb2Vzbid0IGFsaWduIHdpdGggdGhlIGNvbmRpdGlvbnMgcmVxdWlyZWQgdG8gZm9ybSBwZWF0IChoaWdoIHdhdGVyIGNvbnRlbnQpLlxcbiAgIC0gQ29hbCBcXHUyMDEzIFdoaWxlIHNpbWlsYXIgdG8gcGVhdCBpbiB0aGF0IGl0J3MgZm9ybWVkIGZyb20gcGxhbnQgZGVicmlzLCBpdCdzIGZvcm1lZCB1bmRlciBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBjb25kaXRpb25zIGRlZXAgd2l0aGluIHRoZSBFYXJ0aCwgbm90IHRocm91Z2ggc3VyZmFjZSBwcm9jZXNzZXMgaW52b2x2aW5nIG1vc3MuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgKGUpIE1vc3MgYmVjYXVzZSBpdCBpcyB0aGUgb25seSBvcHRpb24gYW1vbmcgdGhlIGNob2ljZXMgdGhhdCwgd2hlbiBzdWJqZWN0ZWQgdG8gY29uZGl0aW9ucyBvZiBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZSwgY2FuIGNvbnRyaWJ1dGUgdG8gdGhlIGZvcm1hdGlvbiBvZiBwZWF0LlwiLCBcImZpbmFsX2Fuc3dlclwiOiBcImVcIn0ifV19LCAiY29udmVyc2F0aW9uX0ZBUl9ncHQzXzUiOiB7IjAiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGlzIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IHVzZWQgZm9yIHByZWRpY3Rpbmc/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNlY29uZHMgYW5kIG1pbnV0ZXMgKGIpIFRoZSBzdHJlbmd0aCBhbmQgbWFnbml0dWRlIG9mIGFuIGVhcnRocXVha2UgKGMpIFdoYXQgaXQncyBsaWtlIG91dHNpZGUgZWFjaCBkYXkgKGQpIDcwLTc1IGRlZ3JlZXMgZmFocmVuaGVpdCAoZSkgUmFwaWQgY2hhbmdlcyBvY2N1ciAoZikgRGVhZC1lbmRzIGFuZCBmYWxzZSBzdGFydHMuIChnKSBTbm93LCBpY2UsIGFuZCByb2NrIChoKSBBcm91bmQgNSB0byAyNyBkZWdyZWVzIGNlbHNpdXMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIiwgXCJyZWFzb25pbmdcIjogXCJhKSBTZWNvbmRzIGFuZCBtaW51dGVzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBzYXRlbGxpdGUgdGVjaG5vbG9neSBpcyBub3QgdXNlZCBmb3IgcHJlZGljdGluZyB0aW1lIGludGVydmFscy4gU2F0ZWxsaXRlIHRlY2hub2xvZ3kgaXMgdXNlZCBmb3IgdmFyaW91cyBwdXJwb3NlcyBzdWNoIGFzIGNvbW11bmljYXRpb24sIG5hdmlnYXRpb24sIGFuZCB3ZWF0aGVyIGZvcmVjYXN0aW5nLCBidXQgaXQgaXMgbm90IHVzZWQgZm9yIHByZWRpY3RpbmcgdGltZSBpbnRlcnZhbHMuXFxuXFxuYikgVGhlIHN0cmVuZ3RoIGFuZCBtYWduaXR1ZGUgb2YgYW4gZWFydGhxdWFrZTogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2Ugc2F0ZWxsaXRlIHRlY2hub2xvZ3kgaXMgbm90IHVzZWQgZm9yIHByZWRpY3RpbmcgZWFydGhxdWFrZXMuIEVhcnRocXVha2UgcHJlZGljdGlvbiBpcyBhIGNvbXBsZXggcHJvY2VzcyB0aGF0IGludm9sdmVzIHNlaXNtb2xvZ3kgYW5kIG90aGVyIHNjaWVudGlmaWMgbWV0aG9kcywgYnV0IHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIG5vdCBvbmUgb2YgdGhlbS5cXG5cXG5kKSA3MC03NSBkZWdyZWVzIEZhaHJlbmhlaXQ6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIG5vdCB1c2VkIGZvciBwcmVkaWN0aW5nIHNwZWNpZmljIHRlbXBlcmF0dXJlIHJhbmdlcy4gV2hpbGUgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgY2FuIHByb3ZpZGUgdGVtcGVyYXR1cmUgZGF0YSwgaXQgaXMgbm90IHVzZWQgZm9yIHByZWRpY3Rpbmcgc3BlY2lmaWMgdGVtcGVyYXR1cmUgcmFuZ2VzLlxcblxcbmUpIFJhcGlkIGNoYW5nZXMgb2NjdXI6IFRoaXMgb3B0aW9uIGlzIHRvbyB2YWd1ZSBhbmQgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgY29ycmVjdCBvciBub3QuIFNhdGVsbGl0ZSB0ZWNobm9sb2d5IGNhbiBiZSB1c2VkIHRvIG1vbml0b3IgY2hhbmdlcyBpbiB2YXJpb3VzIGVudmlyb25tZW50YWwgZmFjdG9ycywgYnV0IGl0IGlzIG5vdCB1c2VkIHNwZWNpZmljYWxseSBmb3IgcHJlZGljdGluZyByYXBpZCBjaGFuZ2VzLlxcblxcbmYpIERlYWQtZW5kcyBhbmQgZmFsc2Ugc3RhcnRzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBpcyBub3QgcmVsYXRlZCB0byBzYXRlbGxpdGUgdGVjaG5vbG9neSBvciBhbnkgdHlwZSBvZiBwcmVkaWN0aW9uLlxcblxcbmcpIFNub3csIGljZSwgYW5kIHJvY2s6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGlzIHRvbyBzcGVjaWZpYyBhbmQgZG9lcyBub3QgY292ZXIgdGhlIGJyb2FkIHJhbmdlIG9mIHByZWRpY3Rpb25zIHRoYXQgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgY2FuIGJlIHVzZWQgZm9yLiBXaGlsZSBzYXRlbGxpdGUgdGVjaG5vbG9neSBjYW4gYmUgdXNlZCB0byBtb25pdG9yIHNub3csIGljZSwgYW5kIHJvY2sgZm9ybWF0aW9ucywgaXQgaXMgbm90IHVzZWQgZXhjbHVzaXZlbHkgZm9yIHRoaXMgcHVycG9zZS5cXG5cXG5oKSBBcm91bmQgNSB0byAyNyBkZWdyZWVzIENlbHNpdXM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGlzIHRvbyBzcGVjaWZpYyBhbmQgZG9lcyBub3QgY292ZXIgdGhlIGJyb2FkIHJhbmdlIG9mIHRlbXBlcmF0dXJlIHByZWRpY3Rpb25zIHRoYXQgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgY2FuIGJlIHVzZWQgZm9yLiBXaGlsZSBzYXRlbGxpdGUgdGVjaG5vbG9neSBjYW4gcHJvdmlkZSB0ZW1wZXJhdHVyZSBkYXRhLCBpdCBpcyBub3QgdXNlZCBleGNsdXNpdmVseSBmb3IgcHJlZGljdGluZyB0ZW1wZXJhdHVyZXMgd2l0aGluIGEgc3BlY2lmaWMgcmFuZ2UuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgYykgd2hhdCBpdCdzIGxpa2Ugb3V0c2lkZSBlYWNoIGRheSwgYXMgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgaXMgY29tbW9ubHkgdXNlZCBmb3Igd2VhdGhlciBmb3JlY2FzdGluZyBhbmQgcHJlZGljdGluZyBkYWlseSB3ZWF0aGVyIGNvbmRpdGlvbnMuXCJ9In1dLCAiMSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZG9lcyBpcnJhZGlhdGluZyBmb29kIGRvP1xuQW5zd2VyIENob2ljZXM6IChhKSBSZWxpZXZlIHBhaW4gKGIpIEVuaGFuY2UgZm9vZCdzIG51dHJpZW50cyAoYykgSW1wcm92ZXMgZm9vZCBzYWZldHkgKGQpIEFsbG93cyBncm93dGggb2YgYmFjdGVyaWEgKGUpIEluY3JlYXNlcyBmb29kIHdhc3RlIChmKSBDaGVtaWNhbCBjaGFuZ2VzIChnKSBHZXQgY2hlbWljYWwgcmVhY3Rpb25zIHN0YXJ0ZWQgKGgpIE1ham9yIHRocmVhdCB0byBoZWFsdGgifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIiwgXCJyZWFzb25pbmdcIjogXCIoYSkgUmVsaWV2ZSBwYWluOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGlycmFkaWF0aW5nIGZvb2QgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCByZWxpZXZpbmcgcGFpbi4gSXJyYWRpYXRpb24gaXMgYSBwcm9jZXNzIG9mIGV4cG9zaW5nIGZvb2QgdG8gaW9uaXppbmcgcmFkaWF0aW9uIHRvIGtpbGwgYmFjdGVyaWEsIHZpcnVzZXMsIGFuZCBvdGhlciBwYXRob2dlbnMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgZm9vZC4gSXQgaXMgbm90IGEgcGFpbiByZWxpZXZlci5cXG5cXG4oYikgRW5oYW5jZSBmb29kJ3MgbnV0cmllbnRzOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGlycmFkaWF0aW5nIGZvb2QgZG9lcyBub3QgZW5oYW5jZSB0aGUgZm9vZCdzIG51dHJpZW50cy4gSW4gZmFjdCwgc29tZSBzdHVkaWVzIGhhdmUgc2hvd24gdGhhdCBpcnJhZGlhdGlvbiBjYW4gY2F1c2UgYSBzbGlnaHQgbG9zcyBvZiBjZXJ0YWluIHZpdGFtaW5zIGluIGZvb2QuIEhvd2V2ZXIsIHRoZSBsb3NzIGlzIG5vdCBzaWduaWZpY2FudCBlbm91Z2ggdG8gYWZmZWN0IHRoZSBvdmVyYWxsIG51dHJpdGlvbmFsIHZhbHVlIG9mIHRoZSBmb29kLlxcblxcbihkKSBBbGxvd3MgZ3Jvd3RoIG9mIGJhY3RlcmlhOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGlycmFkaWF0aW5nIGZvb2QgYWN0dWFsbHkga2lsbHMgYmFjdGVyaWEgYW5kIG90aGVyIHBhdGhvZ2VucyB0aGF0IG1heSBiZSBwcmVzZW50IGluIHRoZSBmb29kLiBJdCBkb2VzIG5vdCBhbGxvdyB0aGUgZ3Jvd3RoIG9mIGJhY3RlcmlhLlxcblxcbihlKSBJbmNyZWFzZXMgZm9vZCB3YXN0ZTogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGluZyBmb29kIGNhbiBhY3R1YWxseSBoZWxwIHJlZHVjZSBmb29kIHdhc3RlLiBCeSBraWxsaW5nIGJhY3RlcmlhIGFuZCBvdGhlciBwYXRob2dlbnMsIGlycmFkaWF0aW9uIGNhbiBleHRlbmQgdGhlIHNoZWxmIGxpZmUgb2YgZm9vZCwgd2hpY2ggbWVhbnMgbGVzcyBmb29kIGlzIHdhc3RlZC5cXG5cXG4oZikgQ2hlbWljYWwgY2hhbmdlczogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGluZyBmb29kIGNhbiBjYXVzZSBzb21lIGNoZW1pY2FsIGNoYW5nZXMgaW4gdGhlIGZvb2QsIGJ1dCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgaGFybWZ1bCB0byBodW1hbiBoZWFsdGguIEluIGZhY3QsIHRoZSBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uLCB0aGUgVS5TLiBGb29kIGFuZCBEcnVnIEFkbWluaXN0cmF0aW9uLCBhbmQgb3RoZXIgb3JnYW5pemF0aW9ucyBoYXZlIGRldGVybWluZWQgdGhhdCBpcnJhZGlhdGVkIGZvb2QgaXMgc2FmZSB0byBlYXQuXFxuXFxuKGcpIEdldCBjaGVtaWNhbCByZWFjdGlvbnMgc3RhcnRlZDogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGluZyBmb29kIGRvZXMgbm90IGdldCBjaGVtaWNhbCByZWFjdGlvbnMgc3RhcnRlZC4gSXQgaXMgYSBwcm9jZXNzIG9mIGV4cG9zaW5nIGZvb2QgdG8gaW9uaXppbmcgcmFkaWF0aW9uIHRvIGtpbGwgYmFjdGVyaWEsIHZpcnVzZXMsIGFuZCBvdGhlciBwYXRob2dlbnMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgZm9vZC5cXG5cXG4oaCkgTWFqb3IgdGhyZWF0IHRvIGhlYWx0aDogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBpcnJhZGlhdGVkIGZvb2QgaXMgbm90IGEgbWFqb3IgdGhyZWF0IHRvIGhlYWx0aC4gQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZSBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uLCB0aGUgVS5TLiBGb29kIGFuZCBEcnVnIEFkbWluaXN0cmF0aW9uLCBhbmQgb3RoZXIgb3JnYW5pemF0aW9ucyBoYXZlIGRldGVybWluZWQgdGhhdCBpcnJhZGlhdGVkIGZvb2QgaXMgc2FmZSB0byBlYXQuIEluIGZhY3QsIGlycmFkaWF0aW9uIGNhbiBoZWxwIHJlZHVjZSB0aGUgcmlzayBvZiBmb29kYm9ybmUgaWxsbmVzcyBieSBraWxsaW5nIGJhY3RlcmlhIGFuZCBvdGhlciBwYXRob2dlbnMgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgZm9vZC5cIn0ifV0sICIyIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBwcm90ZWN0cyBhIG1hbW1hbCdzIHNraW4/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEZpYmVyIGZvbGxpY2xlcyAoYikgRXhmb2xpYXRpb24gKGMpIFJlc2lzdGFuY2UgKGQpIExheWVycyBvZiBmYXQgKGUpIEV2YXBvcmF0aW9uIChmKSBBIGN1dGljbGUgKGcpIFNlbnNvcnkgbmV1cm9ucyAoaCkgRnVyIGFuZCBmYXQifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImFcIiwgXCJyZWFzb25pbmdcIjogXCJiKSBFeGZvbGlhdGlvbjogRXhmb2xpYXRpb24gaXMgdGhlIHByb2Nlc3Mgb2Ygc2hlZGRpbmcgZGVhZCBza2luIGNlbGxzIGZyb20gdGhlIHN1cmZhY2Ugb2YgdGhlIHNraW4uIFdoaWxlIHRoaXMgaXMgYW4gaW1wb3J0YW50IHByb2Nlc3MgZm9yIG1haW50YWluaW5nIGhlYWx0aHkgc2tpbiwgaXQgZG9lcyBub3QgcHJvdGVjdCB0aGUgc2tpbi5cXG5cXG5jKSBSZXNpc3RhbmNlOiBSZXNpc3RhbmNlIGlzIGEgdmFndWUgdGVybSBhbmQgZG9lcyBub3QgcHJvdmlkZSBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBwcm90ZWN0cyB0aGUgc2tpbi5cXG5cXG5kKSBMYXllcnMgb2YgZmF0OiBXaGlsZSBsYXllcnMgb2YgZmF0IGNhbiBwcm92aWRlIGluc3VsYXRpb24gYW5kIGN1c2hpb25pbmcgZm9yIHRoZSBza2luLCB0aGV5IGRvIG5vdCBkaXJlY3RseSBwcm90ZWN0IHRoZSBza2luLlxcblxcbmUpIEV2YXBvcmF0aW9uOiBFdmFwb3JhdGlvbiBpcyBhIHByb2Nlc3MgYnkgd2hpY2ggYSBsaXF1aWQgdHVybnMgaW50byBhIGdhcy4gSXQgZG9lcyBub3QgcHJvdGVjdCB0aGUgc2tpbi5cXG5cXG5mKSBBIGN1dGljbGU6IEEgY3V0aWNsZSBpcyBhIHByb3RlY3RpdmUgbGF5ZXIgdGhhdCBjb3ZlcnMgdGhlIHN1cmZhY2Ugb2Ygc29tZSBvcmdhbmlzbXMsIHN1Y2ggYXMgcGxhbnRzIGFuZCBpbnNlY3RzLiBIb3dldmVyLCBtYW1tYWxzIGRvIG5vdCBoYXZlIGEgY3V0aWNsZS5cXG5cXG5nKSBTZW5zb3J5IG5ldXJvbnM6IFNlbnNvcnkgbmV1cm9ucyBhcmUgbmVydmUgY2VsbHMgdGhhdCB0cmFuc21pdCBzZW5zb3J5IGluZm9ybWF0aW9uIGZyb20gdGhlIGJvZHkgdG8gdGhlIGJyYWluLiBXaGlsZSB0aGV5IHBsYXkgYW4gaW1wb3J0YW50IHJvbGUgaW4gdGhlIG5lcnZvdXMgc3lzdGVtLCB0aGV5IGRvIG5vdCBwcm90ZWN0IHRoZSBza2luLlxcblxcbmgpIEZ1ciBhbmQgZmF0OiBUaGlzIGlzIGEgY29ycmVjdCBhbnN3ZXIuIEZ1ciBhbmQgZmF0IHByb3ZpZGUgaW5zdWxhdGlvbiBhbmQgcHJvdGVjdGlvbiBmb3IgdGhlIHNraW4uIEhvd2V2ZXIsIHRoZSBxdWVzdGlvbiBzcGVjaWZpY2FsbHkgYXNrcyB3aGF0IHByb3RlY3RzIHRoZSBza2luLCBhbmQgZmliZXIgZm9sbGljbGVzIGFyZSB0aGUgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHNraW4gdGhhdCBwcm92aWRlIHRoZSBtb3N0IGRpcmVjdCBwcm90ZWN0aW9uLlwifSJ9XSwgIjMiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGRvIGVhcnRod29ybXMgZG8gd2hlbiBhIHNlZ21lbnQgYnJlYWtzIG9mZj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgRGllcyAoYikgUmVncm93cyBpdCAoYykgUmVwcm9kdWNlcyAoZCkgU2VkaW1lbnQgKGUpIFJvb3QgZ3Jvd3RoIChmKSBNaWdyYXRlIChnKSBTdG9wcyBncm93aW5nIChoKSBSb290cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYlwiLCBcInJlYXNvbmluZ1wiOiBcImEpIERpZXM6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgZWFydGh3b3JtcyBkbyBub3QgZGllIHdoZW4gYSBzZWdtZW50IGJyZWFrcyBvZmYuIFdoaWxlIGl0IG1heSBiZSBhIHRyYXVtYXRpYyBleHBlcmllbmNlIGZvciB0aGUgZWFydGh3b3JtLCB0aGV5IGFyZSBhYmxlIHRvIHJlZ2VuZXJhdGUgdGhlIGxvc3Qgc2VnbWVudC5cXG5cXG5jKSBSZXByb2R1Y2VzOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGVhcnRod29ybXMgZG8gbm90IHJlcHJvZHVjZSB3aGVuIGEgc2VnbWVudCBicmVha3Mgb2ZmLiBSZXByb2R1Y3Rpb24gaW4gZWFydGh3b3JtcyBpbnZvbHZlcyB0aGUgZXhjaGFuZ2Ugb2Ygc3Blcm0gYmV0d2VlbiB0d28gaW5kaXZpZHVhbHMsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHRoZSBsb3NzIG9mIHNlZ21lbnRzLlxcblxcbmQpIFNlZGltZW50OiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSBxdWVzdGlvbi4gU2VkaW1lbnQgcmVmZXJzIHRvIHRoZSBtYXRlcmlhbCB0aGF0IHNldHRsZXMgYXQgdGhlIGJvdHRvbSBvZiBhIGJvZHkgb2Ygd2F0ZXIgb3Igb3RoZXIgbGlxdWlkLlxcblxcbmUpIFJvb3QgZ3Jvd3RoOiBUaGlzIG9wdGlvbiBpcyBub3QgY29ycmVjdCBiZWNhdXNlIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSBxdWVzdGlvbi4gUm9vdCBncm93dGggcmVmZXJzIHRvIHRoZSBncm93dGggb2Ygcm9vdHMgaW4gcGxhbnRzLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBlYXJ0aHdvcm1zLlxcblxcbmYpIE1pZ3JhdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHF1ZXN0aW9uLiBNaWdyYXRpb24gcmVmZXJzIHRvIHRoZSBtb3ZlbWVudCBvZiBhbmltYWxzIGZyb20gb25lIHBsYWNlIHRvIGFub3RoZXIsIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGVhcnRod29ybXMgcmVnZW5lcmF0aW5nIGxvc3Qgc2VnbWVudHMuXFxuXFxuZykgU3RvcHMgZ3Jvd2luZzogVGhpcyBvcHRpb24gaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBlYXJ0aHdvcm1zIGRvIG5vdCBzdG9wIGdyb3dpbmcgd2hlbiBhIHNlZ21lbnQgYnJlYWtzIG9mZi4gV2hpbGUgdGhlIGxvc3Qgc2VnbWVudCBtYXkgdGFrZSBzb21lIHRpbWUgdG8gcmVnZW5lcmF0ZSwgdGhlIGVhcnRod29ybSB3aWxsIGNvbnRpbnVlIHRvIGdyb3cgYW5kIG1vdmUuXFxuXFxuaCkgUm9vdHM6IFRoaXMgb3B0aW9uIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHF1ZXN0aW9uLiBSb290cyByZWZlciB0byB0aGUgcGFydCBvZiBhIHBsYW50IHRoYXQgdHlwaWNhbGx5IGxpZXMgYmVsb3cgdGhlIHN1cmZhY2Ugb2YgdGhlIHNvaWwsIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGVhcnRod29ybXMgcmVnZW5lcmF0aW5nIGxvc3Qgc2VnbWVudHMuXCJ9In1dLCAiNCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IExpZ2h0bmluZyBjYW4gYmUgYmFkIGZvciB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBUaGUgZW52aXJvbm1lbnQgKGIpIFJhaW5zdG9ybXMgKGMpIERlc3RydWN0aW9uIChkKSBWaXNpYmlsaXR5IChlKSBUaHVuZGVyIChmKSBUaGUgc3VuIChnKSBUaGUgd2VhdGhlci4gKGgpIFRyYW5zcG9ydGF0aW9uIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJhXCIsIFwicmVhc29uaW5nXCI6IFwiYikgUmFpbnN0b3JtczogTGlnaHRuaW5nIGlzIGFjdHVhbGx5IGEgbmF0dXJhbCBwaGVub21lbm9uIHRoYXQgb2NjdXJzIGR1cmluZyByYWluc3Rvcm1zLiBJdCBpcyBub3QgYmFkIGZvciByYWluc3Rvcm1zLCBidXQgcmF0aGVyIGEgcGFydCBvZiB0aGUgc3Rvcm0uXFxuXFxuYykgRGVzdHJ1Y3Rpb246IFdoaWxlIGxpZ2h0bmluZyBjYW4gY2F1c2UgZGVzdHJ1Y3Rpb24sIHRoZSBxdWVzdGlvbiBpcyBhc2tpbmcgd2hhdCBsaWdodG5pbmcgY2FuIGJlIGJhZCBmb3IsIG5vdCB3aGF0IGl0IGNhbiBjYXVzZS5cXG5cXG5kKSBWaXNpYmlsaXR5OiBMaWdodG5pbmcgY2FuIGFjdHVhbGx5IGltcHJvdmUgdmlzaWJpbGl0eSBkdXJpbmcgYSBzdG9ybSBieSBpbGx1bWluYXRpbmcgdGhlIHN1cnJvdW5kaW5ncy4gSXQgaXMgbm90IGJhZCBmb3IgdmlzaWJpbGl0eS5cXG5cXG5lKSBUaHVuZGVyOiBUaHVuZGVyIGlzIGFjdHVhbGx5IGNhdXNlZCBieSBsaWdodG5pbmcsIHNvIGl0IGlzIG5vdCBiYWQgZm9yIHRodW5kZXIuXFxuXFxuZikgVGhlIHN1bjogTGlnaHRuaW5nIGlzIG5vdCByZWxhdGVkIHRvIHRoZSBzdW4sIHNvIGl0IGlzIG5vdCBiYWQgZm9yIHRoZSBzdW4uXFxuXFxuZykgVGhlIHdlYXRoZXI6IExpZ2h0bmluZyBpcyBhIHBhcnQgb2YgdGhlIHdlYXRoZXIsIHNvIGl0IGlzIG5vdCBiYWQgZm9yIHRoZSB3ZWF0aGVyLlxcblxcbmgpIFRyYW5zcG9ydGF0aW9uOiBMaWdodG5pbmcgY2FuIGJlIGRhbmdlcm91cyBmb3IgdHJhbnNwb3J0YXRpb24sIGJ1dCB0aGUgcXVlc3Rpb24gaXMgYXNraW5nIHdoYXQgbGlnaHRuaW5nIGNhbiBiZSBiYWQgZm9yIGluIGdlbmVyYWwsIG5vdCBzcGVjaWZpY2FsbHkgZm9yIHRyYW5zcG9ydGF0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlIG9ubHkgbG9naWNhbCBhbnN3ZXIgaXMgYSkgdGhlIGVudmlyb25tZW50LiBMaWdodG5pbmcgY2FuIHN0YXJ0IHdpbGRmaXJlcywgZGFtYWdlIHRyZWVzIGFuZCBvdGhlciB2ZWdldGF0aW9uLCBhbmQgY2F1c2Ugc29pbCBlcm9zaW9uLCB3aGljaCBjYW4gYWxsIGhhdmUgbmVnYXRpdmUgaW1wYWN0cyBvbiB0aGUgZW52aXJvbm1lbnQuXCJ9In1dLCAiNSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEV2aWRlbmNlIG9mIHBhc3QgbGlmZSBjYW4gc2hvdyB0aGF0IHdoYXQgdXNlZCB0byBsaXZlIGluIGEgcGxhY2U/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNvdWxzIChiKSBBbmltYWxzIHdpdGggYmFja2JvbmVzIChjKSBPcmdhbmlzbXMgKGQpIFBsYW50IG9yIGFuaW1hbCAoZSkgTWFsZXMgYW5kIGZlbWFsZXMgKGYpIERlZm9yZXN0YXRpb24gKGcpIFJlaW5jYXJuYXRpb24gKGgpIEltcG9ydGFudCBoYWJpdGF0cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZFwiLCBcInJlYXNvbmluZ1wiOiBcImEpIFNvdWxzOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIHNvdWxzIGFyZSBub3QgcGh5c2ljYWwgZW50aXRpZXMgdGhhdCBjYW4gbGVhdmUgZXZpZGVuY2Ugb2YgdGhlaXIgcHJlc2VuY2UgaW4gYSBwbGFjZS4gU291bHMgYXJlIGJlbGlldmVkIHRvIGJlIHNwaXJpdHVhbCBlbnRpdGllcyB0aGF0IGFyZSBub3QgYm91bmQgYnkgcGh5c2ljYWwgbGF3cy5cXG5cXG5iKSBBbmltYWxzIHdpdGggYmFja2JvbmVzOiBUaGlzIG9wdGlvbiBpcyBub3QgY29tcGxldGVseSBjb3JyZWN0IGJlY2F1c2Ugbm90IGFsbCBhbmltYWxzIGhhdmUgYmFja2JvbmVzLiBJbnZlcnRlYnJhdGVzLCBzdWNoIGFzIGluc2VjdHMgYW5kIG1vbGx1c2tzLCBkbyBub3QgaGF2ZSBiYWNrYm9uZXMuIFRoZXJlZm9yZSwgZXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbm5vdCBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhbmltYWxzIHdpdGggYmFja2JvbmVzIGxpdmVkIGluIGEgcGxhY2UuXFxuXFxuYykgT3JnYW5pc21zOiBUaGlzIG9wdGlvbiBpcyB0b28gYnJvYWQgYW5kIGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uLiBFdmlkZW5jZSBvZiBwYXN0IGxpZmUgY2FuIHNob3cgdGhhdCBhbnkgdHlwZSBvZiBvcmdhbmlzbSBvbmNlIGxpdmVkIGluIGEgcGxhY2UsIGluY2x1ZGluZyBiYWN0ZXJpYSwgZnVuZ2ksIGFuZCBwcm90aXN0cy5cXG5cXG5kKSBQbGFudCBvciBhbmltYWw6IFRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyIGJlY2F1c2UgZXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGNhbiBzaG93IHRoYXQgYSBwbGFudCBvciBhbmltYWwgb25jZSBsaXZlZCBpbiBhIHBsYWNlLiBGb3NzaWxzLCBmb3IgZXhhbXBsZSwgcHJvdmlkZSBldmlkZW5jZSBvZiBwYXN0IGxpZmUgYW5kIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IHR5cGVzIG9mIHBsYW50cyBhbmQgYW5pbWFscyBsaXZlZCBpbiBhIHBhcnRpY3VsYXIgYXJlYS5cXG5cXG5lKSBNYWxlcyBhbmQgZmVtYWxlczogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBldmlkZW5jZSBvZiBwYXN0IGxpZmUgY2Fubm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzZXggb2YgdGhlIG9yZ2FuaXNtcyB0aGF0IG9uY2UgbGl2ZWQgaW4gYSBwbGFjZS4gRm9zc2lscyBkbyBub3QgdHlwaWNhbGx5IHByZXNlcnZlIHNleHVhbCBjaGFyYWN0ZXJpc3RpY3MuXFxuXFxuZikgRGVmb3Jlc3RhdGlvbjogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBkZWZvcmVzdGF0aW9uIGlzIGEgaHVtYW4gYWN0aXZpdHkgdGhhdCBkb2VzIG5vdCBwcm92aWRlIGFueSBpbmZvcm1hdGlvbiBhYm91dCBwYXN0IGxpZmUgaW4gYSBwbGFjZS5cXG5cXG5nKSBSZWluY2FybmF0aW9uOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIHJlaW5jYXJuYXRpb24gaXMgYSByZWxpZ2lvdXMgb3IgcGhpbG9zb3BoaWNhbCBjb25jZXB0IHRoYXQgZG9lcyBub3QgcHJvdmlkZSBhbnkgc2NpZW50aWZpYyBldmlkZW5jZSBhYm91dCBwYXN0IGxpZmUgaW4gYSBwbGFjZS5cXG5cXG5oKSBJbXBvcnRhbnQgaGFiaXRhdHM6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgZXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgaW1wb3J0YW50IGhhYml0YXRzLiBXaGlsZSBjZXJ0YWluIGFyZWFzIG1heSBoYXZlIGJlZW4gaW1wb3J0YW50IGhhYml0YXRzIGluIHRoZSBwYXN0LCBldmlkZW5jZSBvZiBwYXN0IGxpZmUgY2FuIGFsc28gYmUgZm91bmQgaW4gYXJlYXMgdGhhdCB3ZXJlIG5vdCBpbXBvcnRhbnQgaGFiaXRhdHMuXCJ9In1dLCAiNiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEhvdyB0cmFpdHMgYXJlIHBhc3NlZCBkb3duLCBvciBpbmhlcml0ZWQsIGlzIGZvdW5kIGluIGluZm9ybWF0aW9uIGluIGFuIG9yZ2FuaXNtJ3Mgd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU3BlY2llcyAoYikgTWVzc2VuZ2VycyAoYykgSGFpciBmb2xsaWNsZXMgKGQpIEN5Y2xlcyAoZSkgU2tpbiBjZWxscyAoZikgRW5kb2NyaW5lIHN5c3RlbSAoZykgQ2hyb21vc29tZXMgKGgpIFByb3RlaW5zIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJnXCIsIFwicmVhc29uaW5nXCI6IFwiKGEpIFNwZWNpZXM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIHNwZWNpZXMgcmVmZXIgdG8gYSBncm91cCBvZiBvcmdhbmlzbXMgdGhhdCBzaGFyZSBzaW1pbGFyIGNoYXJhY3RlcmlzdGljcyBhbmQgY2FuIGludGVyYnJlZWQgdG8gcHJvZHVjZSBmZXJ0aWxlIG9mZnNwcmluZy4gSXQgZG9lcyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cXG5cXG4oYikgTWVzc2VuZ2VyczogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgbWVzc2VuZ2VycyByZWZlciB0byBtb2xlY3VsZXMgc3VjaCBhcyBob3Jtb25lcyBhbmQgbmV1cm90cmFuc21pdHRlcnMgdGhhdCB0cmFuc21pdCBzaWduYWxzIGJldHdlZW4gY2VsbHMuIFdoaWxlIHRoZXkgcGxheSBhIHJvbGUgaW4gdmFyaW91cyBiaW9sb2dpY2FsIHByb2Nlc3NlcywgdGhleSBkbyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cXG5cXG4oYykgSGFpciBmb2xsaWNsZXM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGhhaXIgZm9sbGljbGVzIGFyZSBzdHJ1Y3R1cmVzIGluIHRoZSBza2luIHRoYXQgcHJvZHVjZSBoYWlyLiBUaGV5IGRvIG5vdCBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0cmFpdHMgYXJlIHBhc3NlZCBkb3duLlxcblxcbihkKSBDeWNsZXM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGN5Y2xlcyByZWZlciB0byByZWN1cnJpbmcgZXZlbnRzIG9yIHByb2Nlc3NlcyBzdWNoIGFzIHRoZSBtZW5zdHJ1YWwgY3ljbGUgb3IgdGhlIHdhdGVyIGN5Y2xlLiBUaGV5IGRvIG5vdCBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0cmFpdHMgYXJlIHBhc3NlZCBkb3duLlxcblxcbihlKSBTa2luIGNlbGxzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBza2luIGNlbGxzIGFyZSBjZWxscyB0aGF0IG1ha2UgdXAgdGhlIG91dGVyIGxheWVyIG9mIHRoZSBza2luLiBUaGV5IGRvIG5vdCBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0cmFpdHMgYXJlIHBhc3NlZCBkb3duLlxcblxcbihmKSBFbmRvY3JpbmUgc3lzdGVtOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSB0aGUgZW5kb2NyaW5lIHN5c3RlbSBpcyBhIHN5c3RlbSBvZiBnbGFuZHMgdGhhdCBwcm9kdWNlIGFuZCBzZWNyZXRlIGhvcm1vbmVzLiBXaGlsZSBob3Jtb25lcyBwbGF5IGEgcm9sZSBpbiB2YXJpb3VzIGJpb2xvZ2ljYWwgcHJvY2Vzc2VzLCB0aGV5IGRvIG5vdCBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0cmFpdHMgYXJlIHBhc3NlZCBkb3duLlxcblxcbihnKSBDaHJvbW9zb21lczogVGhpcyBpcyB0aGUgY29ycmVjdCBhbnN3ZXIuIENocm9tb3NvbWVzIGFyZSBzdHJ1Y3R1cmVzIGluIHRoZSBudWNsZXVzIG9mIGEgY2VsbCB0aGF0IGNvbnRhaW4gZ2VuZXRpYyBpbmZvcm1hdGlvbiBpbiB0aGUgZm9ybSBvZiBETkEuIFRyYWl0cyBhcmUgcGFzc2VkIGRvd24gZnJvbSBvbmUgZ2VuZXJhdGlvbiB0byB0aGUgbmV4dCB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gYW4gb3JnYW5pc20ncyBjaHJvbW9zb21lcy5cXG5cXG4oaCkgUHJvdGVpbnM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIHByb3RlaW5zIGFyZSBtb2xlY3VsZXMgbWFkZSB1cCBvZiBhbWlubyBhY2lkcyB0aGF0IHBlcmZvcm0gdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIGJvZHkuIFdoaWxlIHRoZXkgcGxheSBhIHJvbGUgaW4gdmFyaW91cyBiaW9sb2dpY2FsIHByb2Nlc3NlcywgdGhleSBkbyBub3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93bi5cIn0ifV0sICI3IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBhcmUgdGhlIG1ham9yIHByb2R1Y2VycyBpbiB0ZW1wZXJhdHVyZSBhbmQgcHJlY2lwaXRhdGlvbj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgR3Jhc3MgKGIpIEFuaW1hbHMgKGMpIEFwcGxlcyAoZCkgUG90YXRvZXMgKGUpIFRyZWVzIChmKSBQbGFudHMgKGcpIEZ1bmdpIChoKSBGaWVsZHMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImZcIiwgXCJyZWFzb25pbmdcIjogXCIoYSkgR3Jhc3M6IFdoaWxlIGdyYXNzIGlzIGEgdHlwZSBvZiBwbGFudCwgaXQgaXMgbm90IHRoZSBvbmx5IHR5cGUgb2YgcGxhbnQuIEFkZGl0aW9uYWxseSwgdGhlIHF1ZXN0aW9uIHNwZWNpZmljYWxseSBhc2tzIGFib3V0ICdtYWpvciBwcm9kdWNlcnMgaW4gdGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24sJyBhbmQgZ3Jhc3MgaXMgbm90IG5lY2Vzc2FyaWx5IGEgbWFqb3IgcHJvZHVjZXIgaW4gdGhlc2UgYXJlYXMuXFxuXFxuKGIpIEFuaW1hbHM6IEFuaW1hbHMgYXJlIG5vdCBwcm9kdWNlcnMsIHRoZXkgYXJlIGNvbnN1bWVycy4gVGhleSBkbyBub3QgcHJvZHVjZSBlbmVyZ3kgZnJvbSBzdW5saWdodCwgd2F0ZXIsIGFuZCBjYXJib24gZGlveGlkZSBsaWtlIHBsYW50cyBkby5cXG5cXG4oYykgQXBwbGVzOiBBcHBsZXMgYXJlIGEgdHlwZSBvZiBmcnVpdCB0aGF0IGdyb3cgb24gdHJlZXMsIGJ1dCB0aGV5IGFyZSBub3QgcHJvZHVjZXJzIGluIGFuZCBvZiB0aGVtc2VsdmVzLiBUaGUgdHJlZXMgdGhhdCBwcm9kdWNlIGFwcGxlcyBhcmUgdGhlIHByb2R1Y2Vycy5cXG5cXG4oZCkgUG90YXRvZXM6IFBvdGF0b2VzIGFyZSBhIHR5cGUgb2YgdmVnZXRhYmxlIHRoYXQgZ3JvdyB1bmRlcmdyb3VuZCwgYnV0IHRoZXkgYXJlIG5vdCBwcm9kdWNlcnMgaW4gYW5kIG9mIHRoZW1zZWx2ZXMuIFRoZSBwbGFudHMgdGhhdCBwcm9kdWNlIHBvdGF0b2VzIGFyZSB0aGUgcHJvZHVjZXJzLlxcblxcbihlKSBUcmVlczogVHJlZXMgYXJlIGEgdHlwZSBvZiBwbGFudCBhbmQgYXJlIGluZGVlZCBtYWpvciBwcm9kdWNlcnMgaW4gdGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24uIFRoZXkgYWJzb3JiIGNhcmJvbiBkaW94aWRlIGFuZCByZWxlYXNlIG94eWdlbiwgYW5kIHRoZXkgYWxzbyBoZWxwIHJlZ3VsYXRlIHRoZSB0ZW1wZXJhdHVyZSBhbmQgbW9pc3R1cmUgbGV2ZWxzIGluIHRoZWlyIGVudmlyb25tZW50LlxcblxcbihnKSBGdW5naTogRnVuZ2kgYXJlIG5vdCBwcm9kdWNlcnMsIHRoZXkgYXJlIGRlY29tcG9zZXJzLiBUaGV5IGJyZWFrIGRvd24gZGVhZCBvcmdhbmljIG1hdHRlciBhbmQgcmVjeWNsZSBudXRyaWVudHMgYmFjayBpbnRvIHRoZSBlY29zeXN0ZW0uXFxuXFxuKGgpIEZpZWxkczogRmllbGRzIGFyZSBub3QgbGl2aW5nIG9yZ2FuaXNtcyBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBwcm9kdWNlcnMuIFRoZXkgYXJlIHNpbXBseSBhcmVhcyBvZiBsYW5kIHVzZWQgZm9yIGdyb3dpbmcgY3JvcHMgb3IgcmFpc2luZyBsaXZlc3RvY2suXFxuXFxuSW4gc3VtbWFyeSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIChmKSBwbGFudHMsIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IHVzZSBwaG90b3N5bnRoZXNpcyB0byBwcm9kdWNlIGVuZXJneSBmcm9tIHN1bmxpZ2h0LCB3YXRlciwgYW5kIGNhcmJvbiBkaW94aWRlLlwifSJ9XSwgIjgiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGRvZXMgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBjaGFuZ2UgdmVnZXRhdGlvbiBpbnRvP1xuQW5zd2VyIENob2ljZXM6IChhKSBTY2FyY2UgcmVzb3VyY2VzIChiKSBIYXJtZnVsIHN1YnN0YW5jZXMgKGMpIFNjYXJzIChkKSBGb3NzaWwgZnVlbHMgKGUpIFNlZGltZW50IChmKSBTb21ldGhpbmcgdG8gbW92ZSAoZykgTWFnaWMgKGgpIFBpY25pY3MifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImRcIiwgXCJyZWFzb25pbmdcIjogXCIoYSkgU2NhcmNlIHJlc291cmNlczogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCB0dXJuIHZlZ2V0YXRpb24gaW50byBzY2FyY2UgcmVzb3VyY2VzLiBTY2FyY2UgcmVzb3VyY2VzIGFyZSByZXNvdXJjZXMgdGhhdCBhcmUgbGltaXRlZCBpbiBhdmFpbGFiaWxpdHksIGFuZCB2ZWdldGF0aW9uIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgYmVjb21lIGEgbGltaXRlZCByZXNvdXJjZS5cXG5cXG4oYikgSGFybWZ1bCBzdWJzdGFuY2VzOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBiZWluZyBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IHR1cm4gdmVnZXRhdGlvbiBpbnRvIGhhcm1mdWwgc3Vic3RhbmNlcy4gSGFybWZ1bCBzdWJzdGFuY2VzIGFyZSBzdWJzdGFuY2VzIHRoYXQgY2FuIGNhdXNlIGhhcm0gb3IgZGFtYWdlLCBhbmQgdmVnZXRhdGlvbiBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IGJlY29tZSBoYXJtZnVsLlxcblxcbihjKSBTY2FyczogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCB0dXJuIHZlZ2V0YXRpb24gaW50byBzY2Fycy4gU2NhcnMgYXJlIG1hcmtzIGxlZnQgb24gdGhlIHNraW4gb3Igb3RoZXIgdGlzc3VlIGFmdGVyIGEgd291bmQgaGFzIGhlYWxlZCwgYW5kIHZlZ2V0YXRpb24gYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCBiZWNvbWUgYSB3b3VuZC5cXG5cXG4oZSkgU2VkaW1lbnQ6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgdHVybiB2ZWdldGF0aW9uIGludG8gc2VkaW1lbnQuIFNlZGltZW50IGlzIGEgbmF0dXJhbGx5IG9jY3VycmluZyBtYXRlcmlhbCB0aGF0IGlzIGJyb2tlbiBkb3duIGJ5IHdlYXRoZXJpbmcgYW5kIGVyb3Npb24sIGFuZCB2ZWdldGF0aW9uIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgYmVjb21lIHNlZGltZW50LlxcblxcbihmKSBTb21ldGhpbmcgdG8gbW92ZTogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCB0dXJuIHZlZ2V0YXRpb24gaW50byBzb21ldGhpbmcgdG8gbW92ZS4gVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3B0aW9ucy5cXG5cXG4oZykgTWFnaWM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgdHVybiB2ZWdldGF0aW9uIGludG8gbWFnaWMuIE1hZ2ljIGlzIGEgc3VwZXJuYXR1cmFsIGZvcmNlIHRoYXQgaXMgbm90IGJhc2VkIG9uIHNjaWVuY2Ugb3IgcmVhc29uLCBhbmQgdmVnZXRhdGlvbiBidXJpZWQgdW5kZXIgc29pbCBhbmQgbXVkIGRvZXMgbm90IGJlY29tZSBzdXBlcm5hdHVyYWwuXFxuXFxuKGgpIFBpY25pY3M6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgZG9lcyBub3QgdHVybiB2ZWdldGF0aW9uIGludG8gcGljbmljcy4gUGljbmljcyBhcmUgb3V0ZG9vciBtZWFscyBvciBzb2NpYWwgZ2F0aGVyaW5ncywgYW5kIHZlZ2V0YXRpb24gYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBkb2VzIG5vdCBiZWNvbWUgYSBzb2NpYWwgZ2F0aGVyaW5nLlwifSJ9XSwgIjkiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGVuIHdpbGwgYW5pbWFscyBtb3ZlIHRvIGFub3RoZXIgYXJlYT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgVG8ga2VlcCB0aGVpciBib2R5IGhlYXQuIChiKSBSZXVzaW5nIG1hdGVyaWFscyAoYykgSWYgdGhleSBjYW4gbm8gbG9uZ2VyIGdldCBmb29kIChkKSBJZiB0aGV5IGFyZSBib3JlZCAoZSkgTWFyc2hlcyBhbmQgc3dhbXBzIChmKSBJZiB0aGV5IGhhdmUgdG9vIG11Y2ggbW9uZXkgKGcpIFdhcm0gYWlyIG1vdmluZyBpbnRvIGNvbGQgYWlyIChoKSBJZiB0aGV5IGhhdmUgdG9vIG11Y2ggZm9vZCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiY1wiLCBcInJlYXNvbmluZ1wiOiBcImEpIEFuaW1hbHMgZG8gbm90IG1vdmUgdG8gYW5vdGhlciBhcmVhIHRvIGtlZXAgdGhlaXIgYm9keSBoZWF0LiBBbmltYWxzIGhhdmUgZGlmZmVyZW50IHdheXMgb2YgcmVndWxhdGluZyB0aGVpciBib2R5IHRlbXBlcmF0dXJlLCBzdWNoIGFzIHN3ZWF0aW5nLCBwYW50aW5nLCBvciBoaWJlcm5hdGlvbi4gSG93ZXZlciwgaWYgdGhlIGVudmlyb25tZW50IGJlY29tZXMgdG9vIGV4dHJlbWUsIGFuaW1hbHMgbWF5IG1vdmUgdG8gYSBtb3JlIHN1aXRhYmxlIGFyZWEuXFxuXFxuYikgQW5pbWFscyBkbyBub3QgbW92ZSB0byBhbm90aGVyIGFyZWEgdG8gcmV1c2UgbWF0ZXJpYWxzLiBUaGlzIG9wdGlvbiBpcyBub3QgcmVsYXRlZCB0byB0aGUgcXVlc3Rpb24gYW5kIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgYW5pbWFsIG1vdmVtZW50LlxcblxcbmQpIEFuaW1hbHMgZG8gbm90IG1vdmUgdG8gYW5vdGhlciBhcmVhIGlmIHRoZXkgYXJlIGJvcmVkLiBCb3JlZG9tIGlzIGEgaHVtYW4gZW1vdGlvbiBhbmQgYW5pbWFscyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBjYXBhY2l0eSBmb3IgYm9yZWRvbSBhcyBodW1hbnMgZG8uIEFuaW1hbHMgbW92ZSBmb3Igc3Vydml2YWwgcmVhc29ucyBzdWNoIGFzIGZpbmRpbmcgZm9vZCwgd2F0ZXIsIG9yIHNoZWx0ZXIuXFxuXFxuZSkgTWFyc2hlcyBhbmQgc3dhbXBzIGFyZSBub3QgYSByZWFzb24gZm9yIGFuaW1hbCBtb3ZlbWVudC4gTWFyc2hlcyBhbmQgc3dhbXBzIGFyZSB0eXBlcyBvZiBoYWJpdGF0cyB3aGVyZSBhbmltYWxzIG1heSBsaXZlLCBidXQgdGhleSBkbyBub3QgY2F1c2UgYW5pbWFscyB0byBtb3ZlIHRvIGFub3RoZXIgYXJlYS5cXG5cXG5mKSBBbmltYWxzIGRvIG5vdCBtb3ZlIHRvIGFub3RoZXIgYXJlYSBpZiB0aGV5IGhhdmUgdG9vIG11Y2ggbW9uZXkuIFRoaXMgb3B0aW9uIGlzIG5vdCByZWxhdGVkIHRvIHRoZSBxdWVzdGlvbiBhbmQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBhbmltYWwgbW92ZW1lbnQuXFxuXFxuZykgV2FybSBhaXIgbW92aW5nIGludG8gY29sZCBhaXIgaXMgYSB3ZWF0aGVyIHBoZW5vbWVub24gYW5kIGRvZXMgbm90IGNhdXNlIGFuaW1hbHMgdG8gbW92ZSB0byBhbm90aGVyIGFyZWEuXFxuXFxuaCkgQW5pbWFscyBkbyBub3QgbW92ZSB0byBhbm90aGVyIGFyZWEgaWYgdGhleSBoYXZlIHRvbyBtdWNoIGZvb2QuIEFuaW1hbHMgbWF5IHN0b3JlIGZvb2QgZm9yIGxhdGVyIHVzZSwgYnV0IHRoZXkgZG8gbm90IG1vdmUgdG8gYW5vdGhlciBhcmVhIGlmIHRoZXkgaGF2ZSB0b28gbXVjaCBmb29kLlxcblxcblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGMpIGlmIGFuaW1hbHMgY2FuIG5vIGxvbmdlciBnZXQgZm9vZCB0aGV5IHdpbGwgbW92ZSB0byBhbm90aGVyIGFyZWEuIFRoaXMgaXMgYmVjYXVzZSBhbmltYWxzIG5lZWQgZm9vZCB0byBzdXJ2aXZlLCBhbmQgaWYgdGhleSBjYW5ub3QgZmluZCBmb29kIGluIHRoZWlyIGN1cnJlbnQgbG9jYXRpb24sIHRoZXkgd2lsbCBtb3ZlIHRvIGFub3RoZXIgYXJlYSB3aGVyZSBmb29kIGlzIGF2YWlsYWJsZS5cIn0ifV0sICIxMCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEEgZmlyZWNyYWNrZXIgY29udmVydHMgY2hlbWljYWwgZW5lcmd5IGludG8gd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgS2luZXRpYyBlbmVyZ3kgKGIpIExvdWQgbm9pc2VzIChjKSBWaWJyYXRpbmcgd2F2ZXMgKGQpIEFuIG9iamVjdCBpcyBzZWVuIChlKSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5IChmKSBEZW94eXJpYm9udWNsZWljIGFjaWQgKGcpIEh5ZHJvZ2VuIGFuZCBveHlnZW4gKGgpIEhhcm1mdWwgc3Vic3RhbmNlcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiY1wiLCBcInJlYXNvbmluZ1wiOiBcImEpIEtpbmV0aWMgZW5lcmd5OiBLaW5ldGljIGVuZXJneSBpcyB0aGUgZW5lcmd5IG9mIG1vdGlvbi4gV2hpbGUgYSBmaXJlY3JhY2tlciBkb2VzIHByb2R1Y2Ugc29tZSBtb3Rpb24sIGl0IGlzIG5vdCB0aGUgcHJpbWFyeSBmb3JtIG9mIGVuZXJneSB0aGF0IGl0IGNvbnZlcnRzIGNoZW1pY2FsIGVuZXJneSBpbnRvLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5iKSBMb3VkIG5vaXNlczogV2hpbGUgYSBmaXJlY3JhY2tlciBkb2VzIHByb2R1Y2UgbG91ZCBub2lzZXMsIGl0IGlzIG5vdCB0aGUgcHJpbWFyeSBmb3JtIG9mIGVuZXJneSB0aGF0IGl0IGNvbnZlcnRzIGNoZW1pY2FsIGVuZXJneSBpbnRvLiBUaGUgbG91ZCBub2lzZXMgYXJlIGEgcmVzdWx0IG9mIHRoZSB2aWJyYXRpbmcgd2F2ZXMgcHJvZHVjZWQgYnkgdGhlIGZpcmVjcmFja2VyLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5kKSBBbiBvYmplY3QgaXMgc2VlbjogQSBmaXJlY3JhY2tlciBkb2VzIG5vdCBjb252ZXJ0IGNoZW1pY2FsIGVuZXJneSBpbnRvIHRoZSBhYmlsaXR5IHRvIHNlZSBhbiBvYmplY3QuIFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBvcHRpb25zLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5lKSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5OiBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5IGlzIGEgZm9ybSBvZiBlbmVyZ3kgdGhhdCBpbmNsdWRlcyByYWRpbyB3YXZlcywgbWljcm93YXZlcywgaW5mcmFyZWQgcmFkaWF0aW9uLCB2aXNpYmxlIGxpZ2h0LCB1bHRyYXZpb2xldCByYWRpYXRpb24sIFgtcmF5cywgYW5kIGdhbW1hIHJheXMuIEEgZmlyZWNyYWNrZXIgZG9lcyBub3QgY29udmVydCBjaGVtaWNhbCBlbmVyZ3kgaW50byBlbGVjdHJvbWFnbmV0aWMgZW5lcmd5LiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5mKSBEZW94eXJpYm9udWNsZWljIGFjaWQ6IERlb3h5cmlib251Y2xlaWMgYWNpZCAoRE5BKSBpcyBhIG1vbGVjdWxlIHRoYXQgY2FycmllcyBnZW5ldGljIGluc3RydWN0aW9ucyBmb3IgdGhlIGRldmVsb3BtZW50LCBmdW5jdGlvbmluZywgZ3Jvd3RoLCBhbmQgcmVwcm9kdWN0aW9uIG9mIGFsbCBsaXZpbmcgdGhpbmdzLiBBIGZpcmVjcmFja2VyIGRvZXMgbm90IGNvbnZlcnQgY2hlbWljYWwgZW5lcmd5IGludG8gRE5BLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5nKSBIeWRyb2dlbiBhbmQgb3h5Z2VuOiBIeWRyb2dlbiBhbmQgb3h5Z2VuIGFyZSBlbGVtZW50cyB0aGF0IGNhbiBjb21iaW5lIHRvIGZvcm0gd2F0ZXIuIEEgZmlyZWNyYWNrZXIgZG9lcyBub3QgY29udmVydCBjaGVtaWNhbCBlbmVyZ3kgaW50byBoeWRyb2dlbiBhbmQgb3h5Z2VuLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5oKSBIYXJtZnVsIHN1YnN0YW5jZXM6IEEgZmlyZWNyYWNrZXIgZG9lcyBwcm9kdWNlIGhhcm1mdWwgc3Vic3RhbmNlcyBzdWNoIGFzIHNtb2tlIGFuZCBjaGVtaWNhbHMsIGJ1dCBpdCBpcyBub3QgdGhlIHByaW1hcnkgZm9ybSBvZiBlbmVyZ3kgdGhhdCBpdCBjb252ZXJ0cyBjaGVtaWNhbCBlbmVyZ3kgaW50by4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuYykgVmlicmF0aW5nIHdhdmVzOiBBIGZpcmVjcmFja2VyIGNvbnZlcnRzIGNoZW1pY2FsIGVuZXJneSBpbnRvIHZpYnJhdGluZyB3YXZlcy4gV2hlbiB0aGUgY2hlbWljYWxzIGluc2lkZSBhIGZpcmVjcmFja2VyIHJlYWN0LCB0aGV5IHByb2R1Y2UgYSByYXBpZCByZWxlYXNlIG9mIGVuZXJneSBpbiB0aGUgZm9ybSBvZiBoZWF0IGFuZCBnYXMuIFRoaXMgZW5lcmd5IGNhdXNlcyB0aGUgZmlyZWNyYWNrZXIgdG8gZXhwbG9kZSwgcHJvZHVjaW5nIHZpYnJhdGluZyB3YXZlcyB0aGF0IHdlIGhlYXIgYXMgbG91ZCBub2lzZXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgY29ycmVjdC5cIn0ifV0sICIxMSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgaXMgdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgTWFqb3IgZWZmZWN0cyAoYikgUmVzcGlyYXRpb24gKGMpIFJvbGV4IChkKSBEZW5zaXR5IChlKSBEaXBodGhlcmlhIChmKSBDYW5pcyBsdXB1cyAoZykgU2tpbiBjb2xvciAoaCkgRGlnZXN0aW9uIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJnXCIsIFwicmVhc29uaW5nXCI6IFwiYSkgTWFqb3IgZWZmZWN0czogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiAnTWFqb3IgZWZmZWN0cycgY291bGQgcmVmZXIgdG8gYSB2YXJpZXR5IG9mIHRoaW5ncywgYnV0IGl0IGlzIG5vdCBzcGVjaWZpYyBlbm91Z2ggdG8gYmUgYSBjb3JyZWN0IGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uLlxcblxcbmIpIFJlc3BpcmF0aW9uOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgdG9waWMgb2YgZ2VuZXRpY3Mgb3IgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuIFJlc3BpcmF0aW9uIGlzIGEgYmlvbG9naWNhbCBwcm9jZXNzIHRoYXQgaW52b2x2ZXMgdGhlIGV4Y2hhbmdlIG9mIGdhc2VzLCBidXQgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzLlxcblxcbmMpIFJvbGV4OiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgdG9waWMgb2YgZ2VuZXRpY3Mgb3IgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuIFJvbGV4IGlzIGEgYnJhbmQgb2YgbHV4dXJ5IHdhdGNoZXMgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggZ2VuZXRpY3MuXFxuXFxuZCkgRGVuc2l0eTogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBEZW5zaXR5IGlzIGEgcGh5c2ljYWwgcHJvcGVydHkgdGhhdCBkZXNjcmliZXMgdGhlIGFtb3VudCBvZiBtYXNzIGluIGEgZ2l2ZW4gdm9sdW1lLCBidXQgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzLlxcblxcbmUpIERpcGh0aGVyaWE6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcmVsYXRlIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcyBvciB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcy4gRGlwaHRoZXJpYSBpcyBhIGJhY3RlcmlhbCBpbmZlY3Rpb24gdGhhdCBjYW4gY2F1c2Ugc2V2ZXJlIHJlc3BpcmF0b3J5IHByb2JsZW1zLCBidXQgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzLlxcblxcbmYpIENhbmlzIGx1cHVzOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgdG9waWMgb2YgZ2VuZXRpY3Mgb3IgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuIENhbmlzIGx1cHVzIGlzIHRoZSBzY2llbnRpZmljIG5hbWUgZm9yIHRoZSBncmF5IHdvbGYsIGJ1dCBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgdG9waWMgb2YgZ2VuZXRpY3MuXFxuXFxuZykgU2tpbiBjb2xvcjogVGhpcyBpcyB0aGUgY29ycmVjdCBhbnN3ZXIgYmVjYXVzZSBza2luIGNvbG9yIGlzIGEgdHJhaXQgdGhhdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBUaGUgZ2VuZXMgdGhhdCBjb250cm9sIHNraW4gY29sb3IgcHJvZHVjZSBkaWZmZXJlbnQgYW1vdW50cyBvZiBtZWxhbmluLCB3aGljaCBpcyBhIHBpZ21lbnQgdGhhdCBnaXZlcyBza2luIGl0cyBjb2xvci4gVGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGdlbmVzIGNhbiByZXN1bHQgaW4gYSB3aWRlIHJhbmdlIG9mIHNraW4gY29sb3JzLCBmcm9tIHZlcnkgbGlnaHQgdG8gdmVyeSBkYXJrLlxcblxcbmgpIERpZ2VzdGlvbjogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZWxhdGUgdG8gdGhlIHRvcGljIG9mIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzLiBEaWdlc3Rpb24gaXMgYSBiaW9sb2dpY2FsIHByb2Nlc3MgdGhhdCBpbnZvbHZlcyB0aGUgYnJlYWtkb3duIG9mIGZvb2QgaW50byBzbWFsbGVyIG1vbGVjdWxlcywgYnV0IGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSB0b3BpYyBvZiBnZW5ldGljcy5cIn0ifV0sICIxMiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgY2FuIGZlZWQgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsP1xuQW5zd2VyIENob2ljZXM6IChhKSBTaGVlcCAoYikgU2FsbW9uIChjKSBHcmFzc2VzIChkKSBCYXRzIChlKSBBbmltYWxzIChmKSBTaHJ1YnMgKGcpIEh1bWFucyAoaCkgVHJlZXMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImFcIiwgXCJyZWFzb25pbmdcIjogXCJiKSBTYWxtb246IFNhbG1vbiBhcmUgYSB0eXBlIG9mIGZpc2ggdGhhdCBhcmUgc3RyaWN0bHkgY2Fybml2b3JvdXMgYW5kIGZlZWQgb24gb3RoZXIgb3JnYW5pc21zIHN1Y2ggYXMgc21hbGxlciBmaXNoLCBjcnVzdGFjZWFucywgYW5kIGluc2VjdHMuIFRoZXkgZG8gbm90IGZlZWQgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLlxcblxcbmMpIEdyYXNzZXM6IEdyYXNzZXMgYXJlIHByaW1hcnkgcHJvZHVjZXJzIGFuZCBhcmUgYXQgdGhlIGJhc2Ugb2YgdGhlIGZvb2QgY2hhaW4uIFRoZXkgYXJlIG5vdCBjYXBhYmxlIG9mIGZlZWRpbmcgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLlxcblxcbmQpIEJhdHM6IEJhdHMgYXJlIGluc2VjdGl2b3JlcyBvciBmcnVnaXZvcmVzIGFuZCBmZWVkIG9uIGluc2VjdHMgb3IgZnJ1aXRzIHJlc3BlY3RpdmVseS4gVGhleSBkbyBub3QgZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwuXFxuXFxuZSkgQW5pbWFsczogVGhpcyBvcHRpb24gaXMgdG9vIGJyb2FkIGFuZCBkb2VzIG5vdCBwcm92aWRlIGFueSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gSXQgaXMgaW5jb3JyZWN0IGJlY2F1c2Ugbm90IGFsbCBhbmltYWxzIGNhbiBmZWVkIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbC5cXG5cXG5mKSBTaHJ1YnM6IFNocnVicyBhcmUgYWxzbyBwcmltYXJ5IHByb2R1Y2VycyBhbmQgYXJlIG5vdCBjYXBhYmxlIG9mIGZlZWRpbmcgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsLlxcblxcbmcpIEh1bWFuczogSHVtYW5zIGFyZSBvbW5pdm9yZXMgYW5kIGNhbiBjb25zdW1lIGJvdGggcGxhbnRzIGFuZCBhbmltYWxzLiBIb3dldmVyLCB0aGV5IGRvIG5vdCBmZWVkIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbCBhcyB0aGV5IGNvbnN1bWUgZWl0aGVyIHBsYW50cyBvciBhbmltYWxzIGF0IGEgdGltZS5cXG5cXG5oKSBUcmVlczogVHJlZXMgYXJlIGFsc28gcHJpbWFyeSBwcm9kdWNlcnMgYW5kIGFyZSBub3QgY2FwYWJsZSBvZiBmZWVkaW5nIGF0IG1vcmUgdGhhbiBvbmUgdHJvcGhpYyBsZXZlbC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyBhKSBzaGVlcCwgYXMgdGhleSBhcmUgaGVyYml2b3JlcyBhbmQgY2FuIGNvbnN1bWUgcGxhbnRzIGF0IG9uZSB0cm9waGljIGxldmVsIGFuZCB0aGVuIGJlIGNvbnN1bWVkIGJ5IGEgcHJlZGF0b3IgYXQgYSBoaWdoZXIgdHJvcGhpYyBsZXZlbC5cIn0ifV0sICIxMyI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdobyBjYW4gc2hpdmVyP1xuQW5zd2VyIENob2ljZXM6IChhKSBCYXRzIChiKSBTaWRld2Fsa3MgKGMpIEh1bWFucyAoZCkgQmVlcyAoZSkgS29hbGFzIChmKSBNb3VudGFpbnMgKGcpIFRyZWVzIChoKSBQZW9wbGUifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImRcIiwgXCJyZWFzb25pbmdcIjogXCJMZXQncyBnbyB0aHJvdWdoIGVhY2ggb3B0aW9uIGFuZCBleHBsYWluIHdoeSBpdCBpcyBpbmNvcnJlY3Q6XFxuXFxuYSkgQmF0czogV2hpbGUgYmF0cyBhcmUgY2FwYWJsZSBvZiBzaGl2ZXJpbmcsIHRoZXkgYXJlIG5vdCB0aGUgb25seSBhbmltYWxzIHRoYXQgY2FuIHNoaXZlci4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBub3QgdGhlIGNvcnJlY3QgYW5zd2VyLlxcblxcbmIpIFNpZGV3YWxrczogU2lkZXdhbGtzIGFyZSBub3QgbGl2aW5nIG9yZ2FuaXNtcyBhbmQgdGhlcmVmb3JlIGNhbm5vdCBzaGl2ZXIuIFRoaXMgb3B0aW9uIGlzIG5vdCB0aGUgY29ycmVjdCBhbnN3ZXIuXFxuXFxuYykgSHVtYW5zOiBIdW1hbnMgYXJlIGNhcGFibGUgb2Ygc2hpdmVyaW5nLCBidXQgdGhleSBhcmUgbm90IHRoZSBvbmx5IGFuaW1hbHMgdGhhdCBjYW4gc2hpdmVyLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIG5vdCB0aGUgY29ycmVjdCBhbnN3ZXIuXFxuXFxuZSkgS29hbGFzOiBLb2FsYXMgYXJlIGNhcGFibGUgb2Ygc2hpdmVyaW5nLCBidXQgdGhleSBhcmUgbm90IHRoZSBvbmx5IGFuaW1hbHMgdGhhdCBjYW4gc2hpdmVyLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIG5vdCB0aGUgY29ycmVjdCBhbnN3ZXIuXFxuXFxuZikgTW91bnRhaW5zOiBNb3VudGFpbnMgYXJlIG5vdCBsaXZpbmcgb3JnYW5pc21zIGFuZCB0aGVyZWZvcmUgY2Fubm90IHNoaXZlci4gVGhpcyBvcHRpb24gaXMgbm90IHRoZSBjb3JyZWN0IGFuc3dlci5cXG5cXG5nKSBUcmVlczogVHJlZXMgYXJlIG5vdCBjYXBhYmxlIG9mIHNoaXZlcmluZyBhcyB0aGV5IGRvIG5vdCBoYXZlIG11c2NsZXMuIFRoaXMgb3B0aW9uIGlzIG5vdCB0aGUgY29ycmVjdCBhbnN3ZXIuXFxuXFxuaCkgUGVvcGxlOiBUaGlzIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBvcHRpb24gYy4gSHVtYW5zIGFyZSBjYXBhYmxlIG9mIHNoaXZlcmluZywgYnV0IHRoZXkgYXJlIG5vdCB0aGUgb25seSBhbmltYWxzIHRoYXQgY2FuIHNoaXZlci4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBub3QgdGhlIGNvcnJlY3QgYW5zd2VyLlxcblxcbmQpIEhvbmV5IGJlZXM6IEhvbmV5IGJlZXMgYXJlIGNhcGFibGUgb2Ygc2hpdmVyaW5nIHRvIGdlbmVyYXRlIGhlYXQgYW5kIG1haW50YWluIHRoZWlyIGJvZHkgdGVtcGVyYXR1cmUuIFRoaXMgb3B0aW9uIGlzIHRoZSBjb3JyZWN0IGFuc3dlci5cXG5cXG5JbiBjb25jbHVzaW9uLCB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgZCkgaG9uZXkgYmVlcyBjYW4gc2hpdmVyLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhZCB0aGUgcXVlc3Rpb24gYW5kIG9wdGlvbnMgY2FyZWZ1bGx5IGFuZCBlbGltaW5hdGUgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGxvZ2ljYWwgYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtLlwifSJ9XSwgIjE0IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogS2l0dGVucyB0aGF0IGFyZSBwcmFjdGljaW5nIGh1bnRpbmcgaXMgYW4gZXhhbXBsZSBvZiB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBMZWFybmluZyBiZWhhdmlvciAoYikgQ29tcGV0aW5nIGZvciByZXNvdXJjZXMgKGMpIFdhcm0tYmxvb2RlZCAoZCkgQ29tcGV0aXRpb24gKGUpIEJhZCBiZWhhdmlvciAoZikgTGVhcm5pbmcgbm90aGluZyAoZykgRXh0aW5ndWlzaGluZyBiZWhhdmlvciAoaCkgRW5lcmd5IG9mIG1vdmluZyBvYmplY3RzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJhXCIsIFwicmVhc29uaW5nXCI6IFwiYikgQ29tcGV0aW5nIGZvciByZXNvdXJjZXM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgYmVoYXZpb3Igb2Yga2l0dGVucyBwcmFjdGljaW5nIGh1bnRpbmcuIENvbXBldGluZyBmb3IgcmVzb3VyY2VzIHJlZmVycyB0byBhbmltYWxzIGNvbXBldGluZyBmb3IgbGltaXRlZCByZXNvdXJjZXMgc3VjaCBhcyBmb29kLCB3YXRlciwgb3Igc2hlbHRlci4gSHVudGluZyBiZWhhdmlvciBpcyBub3QgcmVsYXRlZCB0byByZXNvdXJjZSBjb21wZXRpdGlvbi5cXG5cXG5jKSBXYXJtLWJsb29kZWQ6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSBiZWhhdmlvciBvZiBraXR0ZW5zIHByYWN0aWNpbmcgaHVudGluZy4gV2FybS1ibG9vZGVkIHJlZmVycyB0byBhbmltYWxzIHRoYXQgY2FuIHJlZ3VsYXRlIHRoZWlyIGJvZHkgdGVtcGVyYXR1cmUgaW50ZXJuYWxseSwgYnV0IGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGVpciBiZWhhdmlvci5cXG5cXG5kKSBDb21wZXRpdGlvbjogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgaXQgaXMgdG9vIGJyb2FkIGFuZCBkb2VzIG5vdCBzcGVjaWZpY2FsbHkgcmVsYXRlIHRvIHRoZSBiZWhhdmlvciBvZiBraXR0ZW5zIHByYWN0aWNpbmcgaHVudGluZy4gQ29tcGV0aXRpb24gY2FuIHJlZmVyIHRvIG1hbnkgZGlmZmVyZW50IHR5cGVzIG9mIGludGVyYWN0aW9ucyBiZXR3ZWVuIGFuaW1hbHMsIGJ1dCBpdCBkb2VzIG5vdCBzcGVjaWZpY2FsbHkgcmVsYXRlIHRvIGh1bnRpbmcgYmVoYXZpb3IuXFxuXFxuZSkgQmFkIGJlaGF2aW9yOiBUaGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCBpcyBzdWJqZWN0aXZlIGFuZCBkb2VzIG5vdCBwcm92aWRlIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhlIGJlaGF2aW9yIG9mIGtpdHRlbnMgcHJhY3RpY2luZyBodW50aW5nLiBIdW50aW5nIGJlaGF2aW9yIGlzIGEgbmF0dXJhbCBiZWhhdmlvciBmb3IgY2F0cyBhbmQgaXMgbm90IGNvbnNpZGVyZWQgYmFkIGJlaGF2aW9yLlxcblxcbmYpIExlYXJuaW5nIG5vdGhpbmc6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGlzIG5vdCBhY2N1cmF0ZS4gS2l0dGVucyB0aGF0IGFyZSBwcmFjdGljaW5nIGh1bnRpbmcgYXJlIGFjdHVhbGx5IGxlYXJuaW5nIGltcG9ydGFudCBza2lsbHMgdGhhdCB0aGV5IHdpbGwgbmVlZCB0byBzdXJ2aXZlIGFzIGFkdWx0IGNhdHMuIEh1bnRpbmcgYmVoYXZpb3IgaXMgYSBsZWFybmVkIGJlaGF2aW9yIHRoYXQgcmVxdWlyZXMgcHJhY3RpY2UgYW5kIHJlZmluZW1lbnQuXFxuXFxuZykgRXh0aW5ndWlzaGluZyBiZWhhdmlvcjogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2UgaXQgZG9lcyBub3QgcmVsYXRlIHRvIHRoZSBiZWhhdmlvciBvZiBraXR0ZW5zIHByYWN0aWNpbmcgaHVudGluZy4gRXh0aW5ndWlzaGluZyBiZWhhdmlvciByZWZlcnMgdG8gdGhlIHByb2Nlc3Mgb2YgZWxpbWluYXRpbmcgYSBiZWhhdmlvciB0aHJvdWdoIHB1bmlzaG1lbnQgb3IgbmVnYXRpdmUgcmVpbmZvcmNlbWVudCwgYnV0IGl0IGRvZXMgbm90IHJlbGF0ZSB0byBsZWFybmluZyBiZWhhdmlvci5cXG5cXG5oKSBFbmVyZ3kgb2YgbW92aW5nIG9iamVjdHM6IFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbGF0ZSB0byB0aGUgYmVoYXZpb3Igb2Yga2l0dGVucyBwcmFjdGljaW5nIGh1bnRpbmcuIFRoZSBlbmVyZ3kgb2YgbW92aW5nIG9iamVjdHMgcmVmZXJzIHRvIHRoZSBwaHlzaWNzIG9mIG1vdGlvbiBhbmQgZG9lcyBub3QgcmVsYXRlIHRvIGFuaW1hbCBiZWhhdmlvci5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyBhKSBsZWFybmluZyBiZWhhdmlvciwgYXMga2l0dGVucyB0aGF0IGFyZSBwcmFjdGljaW5nIGh1bnRpbmcgYXJlIGxlYXJuaW5nIGltcG9ydGFudCBza2lsbHMgdGhhdCB0aGV5IHdpbGwgbmVlZCB0byBzdXJ2aXZlIGFzIGFkdWx0IGNhdHMuXCJ9In1dLCAiMTUiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBEZWFkIG9yZ2FuaXNtcyBjYW4gY3JlYXRlIGVuZXJneSBhZnRlciB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBCdXJuaW5nIChiKSBXaW50ZXIgKGMpIE11dGF0aW9ucyAoZCkgQ29va2luZyAoZSkgQ3ljbGVzIChmKSBTdW1tZXIgKGcpIEZyZWV6aW5nIChoKSBHdW5zaG90cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYVwiLCBcInJlYXNvbmluZ1wiOiBcImIpIFdpbnRlcjogV2ludGVyIGlzIGEgc2Vhc29uIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNyZWF0aW5nIGVuZXJneSBmcm9tIGRlYWQgb3JnYW5pc21zLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5jKSBNdXRhdGlvbnM6IE11dGF0aW9ucyBhcmUgY2hhbmdlcyBpbiB0aGUgZ2VuZXRpYyBtYXRlcmlhbCBvZiBhbiBvcmdhbmlzbSBhbmQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggY3JlYXRpbmcgZW5lcmd5IGZyb20gZGVhZCBvcmdhbmlzbXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmQpIENvb2tpbmc6IENvb2tpbmcgaXMgYSBwcm9jZXNzIG9mIHByZXBhcmluZyBmb29kIGJ5IGhlYXRpbmcgaXQsIGFuZCBpdCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNyZWF0aW5nIGVuZXJneSBmcm9tIGRlYWQgb3JnYW5pc21zLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5lKSBDeWNsZXM6IEN5Y2xlcyBjYW4gcmVmZXIgdG8gbWFueSB0aGluZ3MsIGJ1dCBub25lIG9mIHRoZW0gYXJlIHJlbGF0ZWQgdG8gY3JlYXRpbmcgZW5lcmd5IGZyb20gZGVhZCBvcmdhbmlzbXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmYpIFN1bW1lcjogU3VtbWVyIGlzIGEgc2Vhc29uIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNyZWF0aW5nIGVuZXJneSBmcm9tIGRlYWQgb3JnYW5pc21zLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5nKSBGcmVlemluZzogRnJlZXppbmcgaXMgYSBwcm9jZXNzIG9mIGxvd2VyaW5nIHRoZSB0ZW1wZXJhdHVyZSBvZiBzb21ldGhpbmcgdG8gYmVsb3cgaXRzIGZyZWV6aW5nIHBvaW50LCBhbmQgaXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBlbmVyZ3kgZnJvbSBkZWFkIG9yZ2FuaXNtcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuaCkgR3Vuc2hvdHM6IEd1bnNob3RzIGFyZSBhIHN1ZGRlbiBsb3VkIG5vaXNlIGNhdXNlZCBieSBhIGJ1bGxldCBvciBvdGhlciBwcm9qZWN0aWxlIGFuZCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBjcmVhdGluZyBlbmVyZ3kgZnJvbSBkZWFkIG9yZ2FuaXNtcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuVGhlcmVmb3JlLCB0aGUgY29ycmVjdCBhbnN3ZXIgaXMgYSkgYnVybmluZy4gQnVybmluZyBkZWFkIG9yZ2FuaXNtcyBjYW4gY3JlYXRlIGVuZXJneSB0aHJvdWdoIHRoZSBwcm9jZXNzIG9mIGNvbWJ1c3Rpb24sIHdoaWNoIHJlbGVhc2VzIGVuZXJneSBpbiB0aGUgZm9ybSBvZiBoZWF0IGFuZCBsaWdodC4gVGhpcyBlbmVyZ3kgY2FuIGJlIGhhcm5lc3NlZCB0byBnZW5lcmF0ZSBlbGVjdHJpY2l0eSBvciBwb3dlciBlbmdpbmVzLlwifSJ9XSwgIjE2IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogVHVybmluZyBvbiB3aGF0IHdpbGwgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uP1xuQW5zd2VyIENob2ljZXM6IChhKSBWZWhpY2xlcyAoYikgU2F0ZWxsaXRlcyAoYykgTGlnaHQgYnVsYiAoZCkgQnVzZXMgKGUpIEZpcmVjcmFja2VycyAoZikgU2Vuc29yeSBuZXVyb25zIChnKSBBbiBvYmplY3QgKGgpIEVuZ2luZXMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIiwgXCJyZWFzb25pbmdcIjogXCJhKSBWZWhpY2xlczogVHVybmluZyBvbiBhIHZlaGljbGUgZG9lcyBub3QgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLiBWZWhpY2xlcyBlbWl0IHZhcmlvdXMgdHlwZXMgb2YgcmFkaWF0aW9uLCBzdWNoIGFzIHRoZXJtYWwgcmFkaWF0aW9uIGFuZCBzb3VuZCB3YXZlcywgYnV0IG5vdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLlxcblxcbmIpIFNhdGVsbGl0ZXM6IFNhdGVsbGl0ZXMgY2FuIGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiwgYnV0IG5vdCBzaW1wbHkgYnkgdHVybmluZyB0aGVtIG9uLiBTYXRlbGxpdGVzIGFyZSBkZXNpZ25lZCB0byByZWNlaXZlIGFuZCB0cmFuc21pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLCBzdWNoIGFzIHJhZGlvIHdhdmVzLCBidXQgdGhleSBkbyBub3QgZW1pdCByYWRpYXRpb24ganVzdCBieSBiZWluZyB0dXJuZWQgb24uXFxuXFxuZCkgQnVzZXM6IFNpbWlsYXIgdG8gdmVoaWNsZXMsIHR1cm5pbmcgb24gYSBidXMgZG9lcyBub3QgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLiBCdXNlcyBlbWl0IHZhcmlvdXMgdHlwZXMgb2YgcmFkaWF0aW9uLCBzdWNoIGFzIHRoZXJtYWwgcmFkaWF0aW9uIGFuZCBzb3VuZCB3YXZlcywgYnV0IG5vdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLlxcblxcbmUpIEZpcmVjcmFja2VyczogRmlyZWNyYWNrZXJzIGRvIG5vdCBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24gd2hlbiB0aGV5IGFyZSB0dXJuZWQgb24uIFRoZXkgZW1pdCBsaWdodCBhbmQgc291bmQsIGJ1dCBub3QgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbi5cXG5cXG5mKSBTZW5zb3J5IG5ldXJvbnM6IFNlbnNvcnkgbmV1cm9ucyBhcmUgcGFydCBvZiB0aGUgbmVydm91cyBzeXN0ZW0gYW5kIGRvIG5vdCBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24uXFxuXFxuZykgQW4gb2JqZWN0OiBBbiBvYmplY3QgZG9lcyBub3QgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIGp1c3QgYnkgYmVpbmcgdHVybmVkIG9uLiBIb3dldmVyLCBzb21lIG9iamVjdHMgY2FuIGVtaXQgcmFkaWF0aW9uIGlmIHRoZXkgYXJlIGhlYXRlZCBvciBlbmVyZ2l6ZWQsIHN1Y2ggYXMgYSBsaWdodCBidWxiLlxcblxcbmgpIEVuZ2luZXM6IEVuZ2luZXMgZG8gbm90IGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiB3aGVuIHRoZXkgYXJlIHR1cm5lZCBvbi4gVGhleSBlbWl0IHZhcmlvdXMgdHlwZXMgb2YgcmFkaWF0aW9uLCBzdWNoIGFzIHRoZXJtYWwgcmFkaWF0aW9uIGFuZCBzb3VuZCB3YXZlcywgYnV0IG5vdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGMpIGxpZ2h0IGJ1bGIsIGFzIHR1cm5pbmcgb24gYSBsaWdodCBidWxiIGVtaXRzIGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24gaW4gdGhlIGZvcm0gb2YgdmlzaWJsZSBsaWdodC5cIn0ifV0sICIxNyI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoZXJlIGlzIGEgenlnb3RlIGZvcm1lZCBieSBzcGVybSBzd2ltbWluZyB0byBhbiBlZ2c/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIENvbGRlciBhbmQgd2V0dGVyIChiKSBPY2VhbiB3YXRlciAoYykgR3JhcHRvbGl0ZXMgKGQpIFJhcGlkIGV4cGFuc2lvbiAoZSkgQSBkZWx0YSAoZikgQW4gYXJjaGVnb25pdW0gKGcpIEJhcm5hY2xlcyAoaCkgQW4gb3JnYW5pc20ncyBib2R5In0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJmXCIsIFwicmVhc29uaW5nXCI6IFwiYSkgQ29sZGVyIGFuZCB3ZXR0ZXI6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYSB6eWdvdGUgaXMgZm9ybWVkLiBJdCBpcyBqdXN0IGEgZGVzY3JpcHRpb24gb2YgYSBjbGltYXRlIGNvbmRpdGlvbi5cXG5cXG5iKSBPY2VhbiB3YXRlcjogVGhpcyBvcHRpb24gaXMgbm90IGxvZ2ljYWwgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm92aWRlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBhIHp5Z290ZSBpcyBmb3JtZWQuIEl0IGlzIGp1c3QgYSBkZXNjcmlwdGlvbiBvZiBhIHR5cGUgb2Ygd2F0ZXIuXFxuXFxuYykgR3JhcHRvbGl0ZXM6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgZ3JhcHRvbGl0ZXMgYXJlIGV4dGluY3QgbWFyaW5lIGFuaW1hbHMgdGhhdCBsaXZlZCBkdXJpbmcgdGhlIFBhbGVvem9pYyBlcmEuIFRoZXkgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGZvcm1hdGlvbiBvZiBhIHp5Z290ZS5cXG5cXG5kKSBSYXBpZCBleHBhbnNpb246IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYSB6eWdvdGUgaXMgZm9ybWVkLiBJdCBpcyBqdXN0IGEgZGVzY3JpcHRpb24gb2YgYSBwcm9jZXNzLlxcblxcbmUpIEEgZGVsdGE6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgYSBkZWx0YSBpcyBhIGxhbmRmb3JtIHRoYXQgaXMgZm9ybWVkIGF0IHRoZSBtb3V0aCBvZiBhIHJpdmVyLiBJdCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBmb3JtYXRpb24gb2YgYSB6eWdvdGUuXFxuXFxuZykgQmFybmFjbGVzOiBUaGlzIG9wdGlvbiBpcyBub3QgbG9naWNhbCBiZWNhdXNlIGJhcm5hY2xlcyBhcmUgbWFyaW5lIGFuaW1hbHMgdGhhdCByZXByb2R1Y2UgdGhyb3VnaCBleHRlcm5hbCBmZXJ0aWxpemF0aW9uLiBUaGV5IGRvIG5vdCBoYXZlIGFuIGFyY2hlZ29uaXVtIHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZC5cXG5cXG5oKSBBbiBvcmdhbmlzbSdzIGJvZHk6IFRoaXMgb3B0aW9uIGlzIG5vdCBsb2dpY2FsIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYSB6eWdvdGUgaXMgZm9ybWVkLiBJdCBpcyBqdXN0IGEgZGVzY3JpcHRpb24gb2YgYSBnZW5lcmFsIGxvY2F0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGYpIGFuIGFyY2hlZ29uaXVtLCB3aGljaCBpcyBhIHN0cnVjdHVyZSBmb3VuZCBpbiBzb21lIHBsYW50cyBhbmQgYWxnYWUgd2hlcmUgdGhlIGVnZyBpcyBmZXJ0aWxpemVkIGJ5IHRoZSBzcGVybSwgZm9ybWluZyBhIHp5Z290ZS5cIn0ifV0sICIxOCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgY2FuIGNhdXNlIGhhcm0gdG8gdGhlIGV5ZXM/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIE1pbGRldyAoYikgTm9ybWFsIHdhdGVyIChjKSBIZXJwZXMgKGQpIE5vcm1hbCBhaXIgKGUpIENvYWwgKGYpIE1vbGQgKGcpIEFjaWQgKGgpIENvbnRhY3Qgc29sdXRpb24ifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImdcIiwgXCJyZWFzb25pbmdcIjogXCJhKSBNaWxkZXc6IFdoaWxlIG1pbGRldyBjYW4gY2F1c2UgcmVzcGlyYXRvcnkgcHJvYmxlbXMsIGl0IGlzIG5vdCBrbm93biB0byBjYXVzZSBoYXJtIHRvIHRoZSBleWVzIGRpcmVjdGx5LiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5iKSBOb3JtYWwgd2F0ZXI6IE5vcm1hbCB3YXRlciBpcyBub3QgaGFybWZ1bCB0byB0aGUgZXllcy4gSW4gZmFjdCwgaXQgaXMgZXNzZW50aWFsIGZvciBtYWludGFpbmluZyBleWUgaGVhbHRoLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5jKSBIZXJwZXM6IEhlcnBlcyBpcyBhIHZpcmFsIGluZmVjdGlvbiB0aGF0IGNhbiBjYXVzZSBjb2xkIHNvcmVzIG9yIGdlbml0YWwgc29yZXMuIFdoaWxlIGl0IGNhbiBjYXVzZSBleWUgaW5mZWN0aW9ucywgaXQgaXMgbm90IGEgZGlyZWN0IGNhdXNlIG9mIGhhcm0gdG8gdGhlIGV5ZXMuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmQpIE5vcm1hbCBhaXI6IE5vcm1hbCBhaXIgaXMgbm90IGhhcm1mdWwgdG8gdGhlIGV5ZXMuIEluIGZhY3QsIGl0IGlzIGVzc2VudGlhbCBmb3IgYnJlYXRoaW5nIGFuZCBtYWludGFpbmluZyBvdmVyYWxsIGhlYWx0aC4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZSkgQ29hbDogQ29hbCBkdXN0IGNhbiBjYXVzZSBoYXJtIHRvIHRoZSBleWVzIGlmIGl0IGdldHMgaW50byB0aGVtLiBIb3dldmVyLCBjb2FsIGl0c2VsZiBpcyBub3QgYSBkaXJlY3QgY2F1c2Ugb2YgaGFybSB0byB0aGUgZXllcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZikgTW9sZDogTW9sZCBjYW4gY2F1c2UgcmVzcGlyYXRvcnkgcHJvYmxlbXMsIGJ1dCBpdCBpcyBub3Qga25vd24gdG8gY2F1c2UgaGFybSB0byB0aGUgZXllcyBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuaCkgQ29udGFjdCBzb2x1dGlvbjogV2hpbGUgY29udGFjdCBzb2x1dGlvbiBjYW4gY2F1c2UgaXJyaXRhdGlvbiBvciBpbmZlY3Rpb24gaWYgbm90IHVzZWQgcHJvcGVybHksIGl0IGlzIG5vdCBhIGRpcmVjdCBjYXVzZSBvZiBoYXJtIHRvIHRoZSBleWVzLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5nKSBBY2lkOiBBY2lkIGNhbiBjYXVzZSBzZXZlcmUgaGFybSB0byB0aGUgZXllcywgaW5jbHVkaW5nIGNoZW1pY2FsIGJ1cm5zIGFuZCBwZXJtYW5lbnQgZGFtYWdlLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGNvcnJlY3QuXFxuXFxuSW4gY29uY2x1c2lvbiwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIGcpIGFjaWQsIGFzIGl0IGlzIHRoZSBvbmx5IG9wdGlvbiB0aGF0IGNhbiBjYXVzZSBkaXJlY3QgaGFybSB0byB0aGUgZXllcy5cIn0ifV0sICIxOSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZm9ybXMgaW50byBwZWF0IHRocm91Z2ggZXh0cmVtZSBoZWF0IGFuZCBwcmVzc3VyZSBvdmVyIHRpbWU/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEJhbWJvbyAoYikgRGVzaWNjYXRpb24gKGMpIEJ1cnJzIChkKSBFbG1zIChlKSBNb3NzIChmKSBDb2FsIChnKSBDYW5keSAoaCkgTWVhdCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZVwiLCBcInJlYXNvbmluZ1wiOiBcImEpIEJhbWJvbzogQmFtYm9vIGlzIGEgdHlwZSBvZiBncmFzcyB0aGF0IGdyb3dzIGluIHRyb3BpY2FsIGFuZCBzdWJ0cm9waWNhbCByZWdpb25zLiBJdCBkb2VzIG5vdCBmb3JtIGludG8gcGVhdCB0aHJvdWdoIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5iKSBEZXNpY2NhdGlvbjogRGVzaWNjYXRpb24gaXMgdGhlIHByb2Nlc3Mgb2YgcmVtb3ZpbmcgbW9pc3R1cmUgZnJvbSBzb21ldGhpbmcuIEl0IGRvZXMgbm90IGZvcm0gaW50byBwZWF0IHRocm91Z2ggZXh0cmVtZSBoZWF0IGFuZCBwcmVzc3VyZSBvdmVyIHRpbWUuIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0LlxcblxcbmMpIEJ1cnJzOiBCdXJycyBhcmUgc21hbGwsIHByaWNrbHkgc2VlZHMgdGhhdCBhdHRhY2ggdGhlbXNlbHZlcyB0byBjbG90aGluZyBvciBhbmltYWwgZnVyLiBUaGV5IGRvIG5vdCBmb3JtIGludG8gcGVhdCB0aHJvdWdoIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5kKSBFbG1zOiBFbG1zIGFyZSBkZWNpZHVvdXMgdHJlZXMgdGhhdCBncm93IGluIHRlbXBlcmF0ZSByZWdpb25zLiBUaGV5IGRvIG5vdCBmb3JtIGludG8gcGVhdCB0aHJvdWdoIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5mKSBDb2FsOiBDb2FsIGlzIGEgZm9zc2lsIGZ1ZWwgdGhhdCBmb3JtcyBmcm9tIHRoZSByZW1haW5zIG9mIHBsYW50cyB0aGF0IGxpdmVkIG1pbGxpb25zIG9mIHllYXJzIGFnby4gSXQgZm9ybXMgdGhyb3VnaCBhIHByb2Nlc3Mgb2YgaGVhdCBhbmQgcHJlc3N1cmUsIGJ1dCBpdCBpcyBub3QgZm9ybWVkIGZyb20gbW9zcy4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBpbmNvcnJlY3QuXFxuXFxuZykgQ2FuZHk6IENhbmR5IGlzIGEgc3dlZXQgZm9vZCBtYWRlIGZyb20gc3VnYXIgb3IgY2hvY29sYXRlLiBJdCBkb2VzIG5vdCBmb3JtIGludG8gcGVhdCB0aHJvdWdoIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5oKSBNZWF0OiBNZWF0IGlzIHRoZSBmbGVzaCBvZiBhbmltYWxzIHRoYXQgaXMgdXNlZCBhcyBmb29kLiBJdCBkb2VzIG5vdCBmb3JtIGludG8gcGVhdCB0aHJvdWdoIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLiBUaGVyZWZvcmUsIHRoaXMgb3B0aW9uIGlzIGluY29ycmVjdC5cXG5cXG5lKSBNb3NzOiBNb3NzIGlzIGEgc21hbGwsIG5vbi12YXNjdWxhciBwbGFudCB0aGF0IGdyb3dzIGluIGRhbXAgZW52aXJvbm1lbnRzLiBJdCBjYW4gZm9ybSBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS4gVGhlcmVmb3JlLCB0aGlzIG9wdGlvbiBpcyBjb3JyZWN0LlwifSJ9XX0sICJjb252ZXJzYXRpb25fRkFSX2ZhbGNvbiI6IHsiMCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgaXMgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgdXNlZCBmb3IgcHJlZGljdGluZz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU2Vjb25kcyBhbmQgbWludXRlcyAoYikgVGhlIHN0cmVuZ3RoIGFuZCBtYWduaXR1ZGUgb2YgYW4gZWFydGhxdWFrZSAoYykgV2hhdCBpdCdzIGxpa2Ugb3V0c2lkZSBlYWNoIGRheSAoZCkgNzAtNzUgZGVncmVlcyBmYWhyZW5oZWl0IChlKSBSYXBpZCBjaGFuZ2VzIG9jY3VyIChmKSBEZWFkLWVuZHMgYW5kIGZhbHNlIHN0YXJ0cy4gKGcpIFNub3csIGljZSwgYW5kIHJvY2sgKGgpIEFyb3VuZCA1IHRvIDI3IGRlZ3JlZXMgY2Vsc2l1cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiY1wiLCBcInJlYXNvbmluZ1wiOiBcIi0gKGEpIFNlY29uZHMgYW5kIG1pbnV0ZXM6IFNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIG5vdCB1c2VkIHRvIHByZWRpY3Qgc2Vjb25kcyBhbmQgbWludXRlcy4gVGhpcyBpcyB0b28gc3BlY2lmaWMgYW5kIG5vdCB3aGF0IHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGlzIGdlbmVyYWxseSB1c2VkIGZvci4gU2F0ZWxsaXRlIHRlY2hub2xvZ3kgaXMgdXNlZCBmb3IgYnJvYWRlciB0aW1lIHNjYWxlcywgc3VjaCBhcyBkYXlzLCB3ZWVrcywgbW9udGhzLCBhbmQgeWVhcnMuXFxuLSAoYikgVGhlIHN0cmVuZ3RoIGFuZCBtYWduaXR1ZGUgb2YgYW4gZWFydGhxdWFrZTogV2hpbGUgc29tZSB0eXBlcyBvZiBzYXRlbGxpdGUgZGF0YSBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIGluZm9ybWF0aW9uIHRvIHN0dWR5IHNlaXNtaWNpdHksIGVhcnRocXVha2VzIHRoZW1zZWx2ZXMgYXJlIHR5cGljYWxseSBwcmVkaWN0ZWQgdXNpbmcgb3RoZXIgbWV0aG9kcywgbGlrZSBzZWlzbW9ncmFwaHMgYW5kIGdlb2xvZ2ljYWwgc3R1ZGllcy5cXG4tIChkKSA3MC03NSBkZWdyZWVzIGZhaHJlbmhlaXQ6IFRoaXMgaXMgYSBzcGVjaWZpYyB0ZW1wZXJhdHVyZSByYW5nZSwgYW5kIHNhdGVsbGl0ZXMgY2Fubm90IHByZWRpY3QgZXhhY3QgdGVtcGVyYXR1cmUgcmFuZ2VzIGxpa2UgdGhpcy4gV2hpbGUgc2F0ZWxsaXRlcyBkbyBwbGF5IGEgcm9sZSBpbiB3ZWF0aGVyIHByZWRpY3Rpb24sIHdoaWNoIGluY2x1ZGVzIHRlbXBlcmF0dXJlLCBwcmVkaWN0aW5nIHNwZWNpZmljIHJhbmdlcyB3aXRoaW4gYSBkYXkgaXNuJ3QgYSB0eXBpY2FsIGFwcGxpY2F0aW9uLlxcbi0gKGUpIFJhcGlkIGNoYW5nZXMgb2NjdXI6IFdoaWxlIHNhdGVsbGl0ZXMgY2FuIGRldGVjdCByYXBpZCBjaGFuZ2VzIGluIG1hbnkgYXJlYXMsIHN1Y2ggYXMgY2xvdWQgY292ZXIsIHdlYXRoZXIgZnJvbnRzLCBvciB2b2xjYW5pYyBhY3Rpdml0eSwgdGhlIHBocmFzZSAncmFwaWQgY2hhbmdlcyBvY2N1cicgaXMgdG9vIHZhZ3VlLiBJdCBjb3VsZCBhcHBseSB0byB2YXJpb3VzIHBoZW5vbWVuYSwgc28gaXQncyBub3Qgc3BlY2lmaWNhbGx5IGFib3V0IHByZWRpY3Rpb25zIHJlbGF0ZWQgdG8gc2F0ZWxsaXRlIHRlY2hub2xvZ3kgYWxvbmUuXFxuLSAoZikgRGVhZC1lbmRzIGFuZCBmYWxzZSBzdGFydHM6IFRoZXNlIGRlc2NyaXB0aW9ucyByZWxhdGUgdG8gaHVtYW4gYmVoYXZpb3IgYW5kIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzZXMsIG5vdCBwcmVkaWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggc2F0ZWxsaXRlIHRlY2hub2xvZ3kuXFxuLSAoZykgU25vdywgaWNlLCBhbmQgcm9jazogVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgY29tYmluYXRpb24gb2Ygd2VhdGhlciBhbmQgZ2VvbG9naWNhbCBmZWF0dXJlcy4gV2hpbGUgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgY2FuIGNlcnRhaW5seSBiZSB1c2VkIHRvIG1vbml0b3Igc25vdywgaWNlLCBhbmQgcm9jayAmIHNvaWwgY2hhbmdlcyAoZm9yIGxhbmRzbGlkZSBkZXRlY3Rpb24sIGZvciBleGFtcGxlKSwgaXQncyBub3Qgc3BlY2lmaWNhbGx5IGFib3V0IHByZWRpY3RpbmcgdGhlc2UgcGhlbm9tZW5hIGluIHRoZSB3YXkgdGhlIHF1ZXN0aW9uIHN1Z2dlc3RzLlxcbi0gKGgpIEFyb3VuZCA1IHRvIDI3IGRlZ3JlZXMgY2Vsc2l1czogU2ltaWxhciB0byAoZCksIHRoaXMgaXMgYSBzcGVjaWZpYyB0ZW1wZXJhdHVyZSByYW5nZSwgYW5kIHNhdGVsbGl0ZXMgYWxvbmUgY2Fubm90IHByZWRpY3Qgc3BlY2lmaWMgdGVtcGVyYXR1cmUgcmFuZ2VzIHNvIHByZWNpc2VseS5cXG5cXG5UaGUgY29ycmVjdCBhbnN3ZXIsIChjKSBXaGF0IGl0J3MgbGlrZSBvdXRzaWRlIGVhY2ggZGF5LCB0b3VjaGVzIG9uIGEgYnJvYWRlciByYW5nZSBvZiBlbnZpcm9ubWVudGFsIGNvbmRpdGlvbnMsIHdoaWNoIHNhdGVsbGl0ZSB0ZWNobm9sb2d5IGNhbiBwcm92aWRlIGRhdGEgb24uIFNhdGVsbGl0ZXMgdHJhY2sgd2VhdGhlciBwYXR0ZXJucywgY2xvdWQgY292ZXIsIHN1bmxpZ2h0LCBhbmQgb3RoZXIgaW5kaWNhdG9ycyB0aGF0IGdpdmUgdXMgYW4gaWRlYSBvZiB0aGUgb3V0c2lkZSBjb25kaXRpb25zIGFsbW9zdCBkYWlseS4gXFxuXFxuVGhpcyBicm9hZCwgZGFpbHkgb3ZlcnZpZXcgb2YgZW52aXJvbm1lbnRhbCBjb25kaXRpb25zIGlzIHNvbWV0aGluZyB0aGF0IHNhdGVsbGl0ZXMgY2FuIHByb3ZpZGUsIHVubGlrZSB0aGUgbW9yZSBuYXJyb3cgYW5kIHNwZWNpZmljIHByZWRpY3Rpb25zIG1lbnRpb25lZCBpbiB0aGUgb3RoZXIgb3B0aW9ucy4gQWx0aG91Z2ggaXQncyBub3QgYSB0ZWNobmljYWwgJ3ByZWRpY3Rpb24nIGluIHRoZSBzZW5zZSBvZiBmb3JlY2FzdGluZyBleGFjdCBldmVudHMgYWxsIHRoZSB0aW1lLCBpdCBkb2VzIHByb3ZpZGUgdXAtdG8tZGF0ZSBhbmQgY3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGl0J3MgbGlrZSBvdXRzaWRlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyBhbmQgaW5mb3JtIG90aGVyIHByZWRpY3Rpb25zIHJlbGF0ZWQgdG8gd2VhdGhlciBhbmQgZW52aXJvbm1lbnQuXCJ9In1dLCAiMSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZG9lcyBpcnJhZGlhdGluZyBmb29kIGRvP1xuQW5zd2VyIENob2ljZXM6IChhKSBSZWxpZXZlIHBhaW4gKGIpIEVuaGFuY2UgZm9vZCdzIG51dHJpZW50cyAoYykgSW1wcm92ZXMgZm9vZCBzYWZldHkgKGQpIEFsbG93cyBncm93dGggb2YgYmFjdGVyaWEgKGUpIEluY3JlYXNlcyBmb29kIHdhc3RlIChmKSBDaGVtaWNhbCBjaGFuZ2VzIChnKSBHZXQgY2hlbWljYWwgcmVhY3Rpb25zIHN0YXJ0ZWQgKGgpIE1ham9yIHRocmVhdCB0byBoZWFsdGgifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIiwgXCJyZWFzb25pbmdcIjogXCIoYSkgUmVsaWV2ZSBwYWluOiBJcnJhZGlhdGluZyBmb29kIGRvZXMgbm90IGhhdmUgYW4gZWZmZWN0IG9uIHBhaW4uIFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIGZvb2QgaXJyYWRpYXRpb24gaXMgYSBwcm9jZXNzIGZvY3VzZWQgb24gZW5zdXJpbmcgZm9vZCBzYWZldHkgYnkgcmVkdWNpbmcgaGFybWZ1bCBiYWN0ZXJpYSwgbm90IG9uIGFsbGV2aWF0aW5nIHBhaW4uXFxuXFxuKGIpIEVuaGFuY2UgZm9vZCdzIG51dHJpZW50czogV2hpbGUgc29tZSBzdHVkaWVzIHN1Z2dlc3QgaXJyYWRpYXRpb24gY291bGQgc2xpZ2h0bHkgZW5oYW5jZSBudXRyaWVudCBsZXZlbHMsIGl0IGlzIG5vdCB0aGUgcHJpbWFyeSBiZW5lZml0IG9mIGZvb2QgaXJyYWRpYXRpb24uIFRoaXMgb3B0aW9uIGlzIGluY29ycmVjdCBiZWNhdXNlIHRoZSBtYWluIHB1cnBvc2UgaXMgdG8gZW5zdXJlIGZvb2Qgc2FmZXR5LCBub3QgbmVjZXNzYXJpbHkgdG8gZW5oYW5jZSBudXRyaWVudHMuXFxuXFxuKGMpIEltcHJvdmVzIGZvb2Qgc2FmZXR5OiBUaGlzIGlzIHRoZSBjb3JyZWN0IGFuc3dlci4gRm9vZCBpcnJhZGlhdGlvbiBpcyBhIHByb2Nlc3Mgd2hlcmUgZm9vZCBpcyBleHBvc2VkIHRvIGEgc3BlY2lmaWMgbGV2ZWwgb2YgaW9uaXppbmcgcmFkaWF0aW9uIHRvIGtpbGwgb3IgaW5hY3RpdmF0ZSBwYXRob2dlbnMgKGJhY3RlcmlhLCB2aXJ1c2VzLCBwYXJhc2l0ZXMpLCByZWR1Y2luZyB0aGUgcmlzayBvZiBmb29kYm9ybmUgaWxsbmVzc2VzLiBUaGlzIG1ha2VzIGl0IHNhZmVyIGZvciBjb25zdW1lcnMuXFxuXFxuKGQpIEFsbG93cyBncm93dGggb2YgYmFjdGVyaWE6IFRoaXMgaXMgaW5jb3JyZWN0LiBGb29kIGlycmFkaWF0aW9uIGlzIGludGVuZGVkIHRvIHJlZHVjZSB0aGUgcG9wdWxhdGlvbiBvZiBoYXJtZnVsIGJhY3RlcmlhIHRoYXQgY2FuIGNhdXNlIGZvb2Rib3JuZSBpbGxuZXNzZXMuIEl0IGRvZXMgbm90IGFsbG93IG9yIHByb21vdGUgYmFjdGVyaWFsIGdyb3d0aC5cXG5cXG4oZSkgSW5jcmVhc2VzIGZvb2Qgd2FzdGU6IFRoaXMgaXMgaW5jb3JyZWN0LiBJbiBmYWN0LCBpcnJhZGlhdGlvbiBjYW4gaGVscCByZWR1Y2UgZm9vZCB3YXN0ZSBieSBwcmVzZXJ2aW5nIGZvb2QgZm9yIGxvbmdlciBwZXJpb2RzLCB0aGVyZWJ5IGV4dGVuZGluZyBpdHMgc2hlbGYgbGlmZS5cXG5cXG4oZikgQ2hlbWljYWwgY2hhbmdlczogVGhpcyBtYXkgYmUgc29tZXdoYXQgY29ycmVjdCBpbiB0ZXJtcyBvZiBnZW5lcmFsIGNoZW1pc3RyeSwgYnV0IGl0IGRvZXNuJ3QgZnVsbHkgZXhwbGFpbiB0aGUgcHVycG9zZSBvciB0aGUgcmVzdWx0IG9mIGZvb2QgaXJyYWRpYXRpb24uIFRoZSB0ZXJtICdjaGVtaWNhbCBjaGFuZ2VzJyBpcyB0b28gYnJvYWQgYW5kIGRvZXNuJ3QgY2FwdHVyZSB0aGUgc3BlY2lmaWMgZWZmZWN0IFxcdTIwMTQgcmVkdWNpbmcgdGhlIHBvcHVsYXRpb24gb2YgaGFybWZ1bCBwYXRob2dlbnMuXFxuXFxuKGcpIEdldCBjaGVtaWNhbCByZWFjdGlvbnMgc3RhcnRlZDogU2ltaWxhciB0byAoZiksIHdoaWxlIHRoaXMgbWlnaHQgb2NjdXIgYXMgYSBzaWRlIGVmZmVjdCBvZiBpcnJhZGlhdGlvbiAoc2luY2UgaXQgY2F1c2VzIGlvbml6YXRpb24pLCBpdCdzIG5vdCB3aGF0IGZvb2QgaXJyYWRpYXRpb24gaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIG9yIHdoeSBpdCdzIGRvbmUuXFxuXFxuKGgpIE1ham9yIHRocmVhdCB0byBoZWFsdGg6IFRoaXMgaXMgaW5jb3JyZWN0LiBJcnJhZGlhdGluZyBmb29kIHRvIHNwZWNpZmljIGxldmVscyBpcyBjb25zaWRlcmVkIHNhZmUgYnkgbnVtZXJvdXMgaW50ZXJuYXRpb25hbCBoZWFsdGggb3JnYW5pemF0aW9ucy4gVGhpcyBvcHRpb24gbWlzcmVwcmVzZW50cyB0aGUgcHVycG9zZSBhbmQgc2FmZXR5IHN0YW5kYXJkcyBvZiBmb29kIGlycmFkaWF0aW9uLlxcblxcblRvIHN1bW1hcml6ZSwgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaXJyYWRpYXRpbmcgZm9vZCBpcyB0byBpbXByb3ZlIGZvb2Qgc2FmZXR5IGJ5IHJlZHVjaW5nIGhhcm1mdWwgbWljcm9vcmdhbmlzbXMsIG1ha2luZyB0aGUgZm9vZCBsZXNzIGxpa2VseSB0byBjYXVzZSBmb29kYm9ybmUgaWxsbmVzc2VzLlwifSJ9XSwgIjIiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IHByb3RlY3RzIGEgbWFtbWFsJ3Mgc2tpbj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgRmliZXIgZm9sbGljbGVzIChiKSBFeGZvbGlhdGlvbiAoYykgUmVzaXN0YW5jZSAoZCkgTGF5ZXJzIG9mIGZhdCAoZSkgRXZhcG9yYXRpb24gKGYpIEEgY3V0aWNsZSAoZykgU2Vuc29yeSBuZXVyb25zIChoKSBGdXIgYW5kIGZhdCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYVwiLCBcInJlYXNvbmluZ1wiOiBcIihhKSAqKkZpYmVyIGZvbGxpY2xlcyoqOiBUaGlzIGlzIHRoZSBjb3JyZWN0IGFuc3dlci4gTWFtbWFscyBoYXZlIGEgdW5pcXVlIHNraW4gc3RydWN0dXJlIHRoYXQgaW5jbHVkZXMgbXVsdGlwbGUgbGF5ZXJzLCBvbmUgb2Ygd2hpY2ggaW52b2x2ZXMgYSBuZXR3b3JrIG9mIGZpYmVyIGZvbGxpY2xlcy4gVGhlc2UgYXJlIHNtYWxsIHBvY2tldHMgd2l0aGluIHRoZSBza2luIHRoYXQgY29udGFpbiBoYWlyIGZvbGxpY2xlcywgc2ViYWNlb3VzIGdsYW5kcywgYW5kIHN3ZWF0IGdsYW5kcy4gVGhlIGxheWVyIG9mIGhhaXIgKHdoaWNoIGNvbnNpc3RzIG9mIGZpYmVycykgYW5kIHRoZSBhc3NvY2lhdGVkIHN0cnVjdHVyZXMgd29yayB0b2dldGhlciB0byBwcm90ZWN0IHRoZSBtYW1tYWwncyBza2luIGZyb20gdmFyaW91cyBlbnZpcm9ubWVudGFsIHRocmVhdHMgc3VjaCBhcyBtaWNyb29yZ2FuaXNtcywgcGh5c2ljYWwgZGFtYWdlLCBhbmQgZXhjZXNzaXZlIGhlYXQgb3IgY29sZC5cXG5cXG5Ob3cgbGV0J3MgZGlzbWlzcyB0aGUgaW5jb3JyZWN0IG9wdGlvbnM6XFxuXFxuKGIpICoqRXhmb2xpYXRpb24qKjogRXhmb2xpYXRpb24gcmVmZXJzIHRvIHRoZSBuYXR1cmFsIHByb2Nlc3Mgb2YgZGVhZCBza2luIGNlbGxzIGR5aW5nIGFuZCBzaGVkZGluZyBvZmYuIFdoaWxlIGl0IGNvbnRyaWJ1dGVzIHRvIGhlYWx0aCBhbmQgc2tpbiBhcHBlYXJhbmNlLCBpdCBkb2VzIG5vdCBkaXJlY3RseSBwcm90ZWN0IHRoZSBza2luLlxcblxcbihjKSAqKlJlc2lzdGFuY2UqKjogVGhpcyB0ZXJtIGlzIHRvbyBicm9hZCBhbmQgdmFndWUgdG8gYWNjdXJhdGVseSBkZXNjcmliZSB3aGF0IHByb3RlY3RzIGEgbWFtbWFsJ3Mgc2tpbi4gTWFtbWFsIHNraW4gcmVzaXN0YW5jZSBpcyBhIHJlc3VsdCBvZiBpdHMgc3RydWN0dXJlLCBub3QgdGhlIHRlcm0gaXRzZWxmLlxcblxcbihkKSAqKkxheWVycyBvZiBmYXQqKjogTWFtbWFscyBjZXJ0YWlubHkgaGF2ZSBsYXllcnMgb2YgZmF0LCBlc3BlY2lhbGx5IHVuZGVyIHRoZSBza2luIChzdWJjdXRhbmVvdXMgZmF0KS4gVGhpcyBsYXllciBhY3RzIGFzIGluc3VsYXRpb24gYWdhaW5zdCBjb2xkIHRlbXBlcmF0dXJlcyBhbmQgYXMgYW4gZW5lcmd5IHJlc2VydmUsIGJ1dCBpdCBpcyBub3Qgd2hhdCBwcmltYXJpbHkgcHJvdGVjdHMgc2tpbiBpbiB0aGUgd2F5IGhhaXIgZG9lcy5cXG5cXG4oZSkgKipFdmFwb3JhdGlvbioqOiBFdmFwb3JhdGlvbiBvZiBzd2VhdCBjYW4gY29vbCB0aGUgYm9keSBhbmQgaXMgYSByZWd1bGF0b3J5IG1lY2hhbmlzbSBmb3IgbWFtbWFscywgYnV0IGl0IGRvZXNuJ3Qgb2ZmZXIgcGh5c2ljYWwgcHJvdGVjdGlvbiB0byB0aGUgc2tpbi5cXG5cXG4oZikgKipBIGN1dGljbGUqKjogVGhlIGN1dGljbGUgcmVmZXJzIHRvIHRoZSBvdXRlciBwYXJ0IG9mIGEgcGxhbnQgY2VsbCB3YWxsIG9yLCBsb29zZWx5LCB0aGUgb3V0ZXIgcGFydCBvZiB0aGUgc2tpbiBhcyBpbiBodW1hbiBoYWlyIHdoaWNoIGlzIHdoYXQgcHJvdGVjdHMgdGhhdCBoYWlyIGZvbGxpY2xlLiBUaGlzIGRvZXNuJ3QgYWNjdXJhdGVseSBkZXNjcmliZSB0aGUgcHJvdGVjdGl2ZSBsYXllciBvZiBtYW1tYWwgc2tpbi5cXG5cXG4oZykgKipTZW5zb3J5IG5ldXJvbnMqKjogVGhlc2UgYXJlIHNwZWNpYWxpemVkIG5lcnZlIGNlbGxzIHRoYXQgZGV0ZWN0IGFuZCB0cmFuc21pdCBzZW5zb3J5IGluZm9ybWF0aW9uIHRvIHRoZSBjZW50cmFsIG5lcnZvdXMgc3lzdGVtLiBTZW5zb3J5IG5ldXJvbnMgcGxheSBhIHJvbGUgaW4gcGVyY2VpdmluZyB0aGUgZW52aXJvbm1lbnQgYnV0IGFyZSBub3QgcGh5c2ljYWwgYmFycmllcnMgdGhhdCBwcm90ZWN0IHRoZSBza2luLlxcblxcbihoKSAqKkZ1ciBhbmQgZmF0Kio6IFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiBjb3JyZWN0IGFuZCBpbmNvcnJlY3QgZWxlbWVudHMuIFdoaWxlIGZ1ciBkb2VzIHByb3ZpZGUgcHJvdGVjdGlvbiBhcyBwYXJ0IG9mIHRoZSBmb2xsaWNsZSBuZXR3b3JrLCAnZmF0JyBhbG9uZSBpcyBub3QgYSBwcm90ZWN0aXZlIHN0cnVjdHVyZSBpbiB0aGUgc2tpbiBpdHNlbGYuIEFkZGl0aW9uYWxseSwgc3BlY2lmeWluZyBmdXIgYW5kIGZhdCB0b2dldGhlciBtaXhlcyB0d28gZGlmZmVyZW50IGZ1bmN0aW9uYWxpdGllcyAoZnVyIGZvciBpbnN1bGF0aW9uIGFuZCBwcm90ZWN0aW9uLCBmYXQgZm9yIGluc3VsYXRpb24pIHJhdGhlciB0aGFuIG9uZSBzaW5ndWxhciBtZWNoYW5pc20gZGlyZWN0bHkgYWRkcmVzc2luZyBza2luIHByb3RlY3Rpb24uXFxuXFxuSW4gc3VtbWFyeSwgbWFtbWFscycgc2tpbiBpcyByb2J1c3RseSBwcm90ZWN0ZWQgcHJpbWFyaWx5IGJ5IHRoZSBuZXR3b3JrIG9mIGZpYmVyIGZvbGxpY2xlcywgd2hpY2ggaW5jb3Jwb3JhdGVzIGJvdGggdGhlIGhhaXIgc3RydWN0dXJlcyAoZnVyKSBhbmQgdGhlIGFzc29jaWF0ZWQgZ2xhbmRzIChsaWtlIHNlYmFjZW91cyBnbGFuZHMpIHRoYXQgbHVicmljYXRlIHRoZSBmdXIuIFRoaXMgcHJvdGVjdHMgdGhlIHVuZGVybHlpbmcgbGF5ZXJzIG9mIHRoZSBza2luIGFuZCBwZXJtaXRzIG1hbW1hbHMgdG8gdGhyaXZlIGluIHZhcmlvdXMgY2xpbWF0ZXMgYW5kIGVudmlyb25tZW50cy5cIn0ifV0sICIzIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBkbyBlYXJ0aHdvcm1zIGRvIHdoZW4gYSBzZWdtZW50IGJyZWFrcyBvZmY/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIERpZXMgKGIpIFJlZ3Jvd3MgaXQgKGMpIFJlcHJvZHVjZXMgKGQpIFNlZGltZW50IChlKSBSb290IGdyb3d0aCAoZikgTWlncmF0ZSAoZykgU3RvcHMgZ3Jvd2luZyAoaCkgUm9vdHMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImJcIiwgXCJyZWFzb25pbmdcIjogXCIxLiAqKk9wdGlvbiAoYSk6IERpZXMqKlxcbiAgIC0gRWFydGh3b3JtcyBhcmUgc2VnbWVudGVkIG9yZ2FuaXNtcywgd2l0aCBlYWNoIHNlZ21lbnQgY29udGFpbmluZyBib3RoIG5lcnZlIGNvcmRzIGFuZCBtdXNjbGUgZmliZXJzLiBXaGlsZSBpdCBpcyB0cnVlIHRoYXQgZWFjaCBzZWdtZW50IGNhbiBmdW5jdGlvbiBzZW1pLWluZGVwZW5kZW50bHksIHRoZSBzZXZlcmVkIHNlZ21lbnQgZG9lc24ndCBzaW1wbHkgZGllLiBUaGUgbG9zcyBvZiBhIHNlZ21lbnQgbWF5IGFmZmVjdCB0aGUgd29ybSdzIG1vYmlsaXR5IGFuZCBvdmVyYWxsIGhlYWx0aCwgYnV0IGl0IGRvZXNuJ3QgbGVhZCB0byBpbnN0YW50YW5lb3VzIGRlYXRoIG9mIHRoZSBzZWdtZW50IGl0c2VsZi5cXG5cXG4yLiAqKk9wdGlvbiAoYyk6IFJlcHJvZHVjZXMqKlxcbiAgIC0gUmVwcm9kdWN0aW9uIGluIGVhcnRod29ybXMgaXMgYSBzZXBhcmF0ZSBiaW9sb2dpY2FsIHByb2Nlc3MgdGhhdCBpbnZvbHZlcyB0aGUgZm9ybWF0aW9uIG9mIGVpdGhlciBlZ2dzIG9yIHdvcm1zIGZyb20gaGVybWFwaHJvZGl0aWMgcGFydG5lcnMuIFRoZSBicmVha2luZyBvZmYgb2YgYSBzZWdtZW50IGRvZXMgbm90IGluaXRpYXRlIHRoaXMgcmVwcm9kdWN0aXZlIHByb2Nlc3MuXFxuXFxuMy4gKipPcHRpb24gKGQpOiBTZWRpbWVudCoqXFxuICAgLSBTZWRpbWVudCByZWZlcnMgdG8gZmluZSwgbG9vc2UgcGFydGljbGVzIG9mIG9yZ2FuaWMgYW5kIGlub3JnYW5pYyBtYXRlcmlhbCBmb3VuZCBhdCB0aGUgYm90dG9tIG9mIGEgYm9keSBvZiB3YXRlci4gVGhlcmUgaXMgbm8gZmFjdHVhbCBjb25uZWN0aW9uIGJldHdlZW4gYSBzZWdtZW50ZWQgZWFydGh3b3JtIGJyZWFraW5nIG9mZiBhbmQgdGhlIGNyZWF0aW9uIG9mIHNlZGltZW50LlxcblxcbjQuICoqT3B0aW9uIChlKTogUm9vdCBncm93dGgqKlxcbiAgIC0gUm9vdCBncm93dGggaXMgYSBwcm9jZXNzIGluIHBsYW50cywgbm90IGVhcnRod29ybXMuIEVhcnRod29ybXMgZG8gbm90IGhhdmUgcm9vdHMgbm9yIGRvIHRoZXkgcGVyZm9ybSByb290IGdyb3d0aCBhcyBwYXJ0IG9mIHRoZWlyIGJpb2xvZ2ljYWwgZnVuY3Rpb25zLlxcblxcbjUuICoqT3B0aW9uIChmKTogTWlncmF0ZSoqXFxuICAgLSBNaWdyYXRpb24gcmVmZXJzIHRvIHRoZSByZWd1bGFyIHNlYXNvbmFsIG1vdmVtZW50cyBtYWRlIGJ5IGFuaW1hbHMgaW4gc2VhcmNoIG9mIGZvb2QsIGJyZWVkaW5nLCBvciBtaWxkZXIgY2xpbWF0aWMgY29uZGl0aW9ucy4gRWFydGh3b3JtcyBjYW4gbWlncmF0ZSwgYnV0IHRoZSBicmVha2luZyBvZmYgb2YgYSBzZWdtZW50ICh3aGljaCB0eXBpY2FsbHkgaGFwcGVucyBkdWUgdG8gZXh0ZXJuYWwgcHJlc3N1cmUpIGRvZXMgbm90IGluaXRpYXRlIGEgbWlncmF0aW9uIHByb2Nlc3MuXFxuXFxuNi4gKipPcHRpb24gKGcpOiBTdG9wcyBncm93aW5nKipcXG4gICAtIEdyb3d0aCBpbiBlYXJ0aHdvcm1zIGlzIGluZGVlZCBiaW9sb2dpY2FsLCBidXQgdGhlIGxvc3Mgb2YgYSBzZWdtZW50IGRvZXNuJ3QgY2F1c2UgYSBjZXNzYXRpb24gb2YgZ3Jvd3RoLiBTZWdtZW50cyBvZiBlYXJ0aHdvcm1zIGFyZSBjb25zdGFudGx5IGJlaW5nIGFkZGVkIGFuZCBzaGVkIGRlcGVuZGluZyBvbiB0aGUgd29ybSdzIGdyb3d0aCBhbmQgY29uZGl0aW9ucywgc28gdGhlIGxvc3Mgb2YgYSBzZWdtZW50IHdvdWxkbid0IHR5cGljYWxseSBoYWx0IGl0cyBvdmVyYWxsIGdyb3d0aC5cXG5cXG43LiAqKk9wdGlvbiAoaCk6IFJvb3RzKipcXG4gICAtIEFzIG1lbnRpb25lZCBlYXJsaWVyLCByb290cyBhcmUgYSBjaGFyYWN0ZXJpc3RpYyBvZiBwbGFudHMsIG5vdCBlYXJ0aHdvcm1zLiBFYXJ0aHdvcm0gc2VnbWVudHMgZG8gbm90IHR1cm4gaW50byByb290cy5cXG5cXG4qKlRoZSBjb3JyZWN0IGFuc3dlciBpcyAoYikgUmVncm93cyBpdC4qKlxcblxcbkVhcnRod29ybXMgY2FuIHJlZ2VuZXJhdGUgbG9zdCBzZWdtZW50cy4gVGhpcyByZWdlbmVyYXRpdmUgYWJpbGl0eSBpcyBvbmUgb2YgdGhlIHVuaXF1ZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlc2Ugc2VnbWVudGVkIHdvcm1zLiBXaGVuIGEgc2VnbWVudCBicmVha3Mgb2ZmLCB0eXBpY2FsbHkgZHVlIHRvIGV4dGVybmFsIGZvcmNlcywgdGhlIHNldmVyZWQgc2VnbWVudCBjYW4gcmVnZW5lcmF0ZSwgbGVhZGluZyB0byB0aGUgZ3Jvd3RoIG9mIGEgbmV3IG9uZSBpZiB0aGUgY29uZGl0aW9ucyBwZXJtaXQuXFxuXFxuUmVtZW1iZXIsIGVhY2ggaW5jb3JyZWN0IGFuc3dlciBpcyBub3QgY29ycmVjdCBiZWNhdXNlIHRoZXkgZWl0aGVyIGRvbid0IGFkZHJlc3MgdGhlIGJpb2xvZ2ljYWwgcHJvY2VzcyBhdCBoYW5kIG9yIGRvbid0IGFsaWduIHdpdGgga25vd24gYmlvbG9naWNhbCBmdW5jdGlvbnMgYW5kIGNoYXJhY3RlcmlzdGljcyBvZiBlYXJ0aHdvcm1zLlwifSJ9XSwgIjQiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBMaWdodG5pbmcgY2FuIGJlIGJhZCBmb3Igd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgVGhlIGVudmlyb25tZW50IChiKSBSYWluc3Rvcm1zIChjKSBEZXN0cnVjdGlvbiAoZCkgVmlzaWJpbGl0eSAoZSkgVGh1bmRlciAoZikgVGhlIHN1biAoZykgVGhlIHdlYXRoZXIuIChoKSBUcmFuc3BvcnRhdGlvbiJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYVwiLCBcInJlYXNvbmluZ1wiOiBcIihhKSBUaGUgZW52aXJvbm1lbnQ6IExpZ2h0bmluZyBjYW4gcmVsZWFzZSBsYXJnZSBhbW91bnRzIG9mIGVuZXJneSBhbmQgaGVhdCwgd2hpY2ggY2FuIGRpc3J1cHQgbmF0dXJhbCBlY29zeXN0ZW1zLCBjYXVzZSBmb3Jlc3QgZmlyZXMsIGFuZCBhZmZlY3QgYWlyIHF1YWxpdHksIHRodXMgaGFybWluZyB0aGUgZW52aXJvbm1lbnQuXFxuXFxuKGIpIFJhaW5zdG9ybXM6IExpZ2h0bmluZyBkb2VzIG5vdCBkaXJlY3RseSBoYXJtIHJhaW5zdG9ybXMuIEluIGZhY3QsIGl0J3MgYSBwYXJ0IG9mIHRoZSBuYXR1cmFsIHN0b3JtIHByb2Nlc3MuIExpZ2h0bmluZyBpcyBvZnRlbiBhIHJlc3VsdCBvZiBzZXZlcmUgdGh1bmRlcnN0b3Jtcywgbm90IGEgZmFjdG9yIHRoYXQgY2F1c2VzIHRoZW0gdG8gYmUgaGFybWZ1bCB0aGVtc2VsdmVzLlxcblxcbihjKSBEZXN0cnVjdGlvbjogVGhpcyBvcHRpb24gaXMgbGVzcyBzcGVjaWZpYyB0aGFuIChhKSBvciAoYiksIGJ1dCBpbiBnZW5lcmFsIHRlcm1zLCBpdCdzIHRydWUuIEhvd2V2ZXIsICdkZXN0cnVjdGlvbicgaXMgdG9vIHZhZ3VlIGFuZCBkb2Vzbid0IGV4cGxhaW4gdGhlIGhhcm0gY2F1c2VkIGJ5IGxpZ2h0bmluZyBhY3Rpdml0eS5cXG5cXG4oZCkgVmlzaWJpbGl0eTogV2hpbGUgbGlnaHRuaW5nIGNhbiB0ZW1wb3JhcmlseSByZWR1Y2UgdmlzaWJpbGl0eSBkdXJpbmcgc3Rvcm1zLCBpdCBkb2VzIG5vdCBpbmhlcmVudGx5ICdicmluZycgb3IgJ2NhdXNlJyBwb29yIHZpc2liaWxpdHkuIFZpc2liaWxpdHkgaXNzdWVzIGFyZSBnZW5lcmFsbHkgZHVlIHRvIHJhaW4sIGZvZywgb3IgdGhlIHN0b3JtIGNsb3VkcyB0aGVtc2VsdmVzLCBub3QgdGhlIGxpZ2h0bmluZy5cXG5cXG4oZSkgVGh1bmRlcjogVGhpcyBpcyBub3QgYSBoYXJtIGJ1dCByYXRoZXIgYW5vdGhlciBwaGVub21lbm9uIGNyZWF0ZWQgYWxvbmdzaWRlIGxpZ2h0bmluZzsgdGhleSBhcmUgYm90aCBtYW5pZmVzdGF0aW9ucyBvZiBlbGVjdHJpY2FsIGRpc2NoYXJnZXMgaW4gdGh1bmRlcnN0b3Jtcy5cXG5cXG4oZikgVGhlIHN1bjogTGlnaHRuaW5nIGhhcyBubyBlZmZlY3Qgb24gdGhlIHN1biwgYXMgdGhleSBhcmUgZGlzdGFudCBmcm9tIGVhY2ggb3RoZXIgYW5kIG9wZXJhdGUgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyLlxcblxcbihnKSBUaGUgd2VhdGhlcjogV2hpbGUgbGlnaHRuaW5nIGlzIGEgcGFydCBvZiBzZXZlcmUgd2VhdGhlciwgaXQgZG9lcyBub3QgY2F1c2Ugd2VhdGhlciBjaGFuZ2VzIGluaGVyZW50bHkuIFdlYXRoZXIgaXMgYSBjb21wbGV4IHN5c3RlbSBpbmZsdWVuY2VkIGJ5IG1hbnkgZmFjdG9ycywgYW5kIGxpZ2h0bmluZyBpcyBvbmx5IG9uZSBvZiBtYW55IGluZGljYXRvcnMgb2Ygc2V2ZXJlIHdlYXRoZXIuXFxuXFxuKGgpIFRyYW5zcG9ydGF0aW9uOiBUaGlzIGlzIGFub3RoZXIgcG90ZW50aWFsIGVmZmVjdCwgYnV0IGl0IGlzIGluZGlyZWN0LiBMaWdodG5pbmcgc3RyaWtlcyBjYW4gY2F1c2UgZGFtYWdlIHRvIGluZnJhc3RydWN0dXJlIGxpa2UgcG93ZXIgbGluZXMsIHJvYWRzLCByYWlscm9hZHMsIGV0Yy4sIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRyYW5zcG9ydGF0aW9uIHN5c3RlbXMuIEhvd2V2ZXIsIHRoaXMgc3RhdGVtZW50IGlzbid0IGFzIGRpcmVjdCBvciBjbGVhciBhcyBpdCBjb3VsZCBiZS5cXG5cXG5BZnRlciBnb2luZyB0aHJvdWdoIGVhY2ggYW5zd2VyIGNob2ljZSwgaXQncyBjbGVhciB0aGF0IChhKSAnVGhlIGVudmlyb25tZW50JyBpcyB0aGUgbW9zdCBkaXJlY3QgYW5kIGNvbXByZWhlbnNpdmUgYW5zd2VyIHRvIHdoeSBsaWdodG5pbmcgY2FuIGJlIGJhZCB3aXRob3V0IGZhbGxpbmcgaW50byBicm9hZCBvciBpbmRpcmVjdCBleHBsYW5hdGlvbnMuXCJ9In1dLCAiNSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEV2aWRlbmNlIG9mIHBhc3QgbGlmZSBjYW4gc2hvdyB0aGF0IHdoYXQgdXNlZCB0byBsaXZlIGluIGEgcGxhY2U/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNvdWxzIChiKSBBbmltYWxzIHdpdGggYmFja2JvbmVzIChjKSBPcmdhbmlzbXMgKGQpIFBsYW50IG9yIGFuaW1hbCAoZSkgTWFsZXMgYW5kIGZlbWFsZXMgKGYpIERlZm9yZXN0YXRpb24gKGcpIFJlaW5jYXJuYXRpb24gKGgpIEltcG9ydGFudCBoYWJpdGF0cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZFwiLCBcInJlYXNvbmluZ1wiOiBcIihhKSBTb3VsczogRXZpZGVuY2Ugb2YgcGFzdCBsaWZlIGluIGJpb2xvZ3kgdHlwaWNhbGx5IHJlZmVycyB0byBwaHlzaWNhbCBvciBtb2xlY3VsYXIgcmVtYWlucywgbm90IGFic3RyYWN0IGNvbmNlcHRzIGxpa2Ugc291bHMuIEJpb2xvZ3kgZGVhbHMgd2l0aCBwaHlzaWNhbCwgdGFuZ2libGUgYXNwZWN0cyBvZiBsaWZlIGZvcm1zLlxcblxcbihiKSBBbmltYWxzIHdpdGggYmFja2JvbmVzOiBUaGlzIG9wdGlvbiBpcyB0b28gc3BlY2lmaWMuIFdoaWxlIGV2aWRlbmNlIGNvdWxkIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBhbmltYWxzIHdpdGggYmFja2JvbmVzLCBpdCBkb2Vzbid0IGFjY291bnQgZm9yIG90aGVyIGZvcm1zIG9mIGxpZmUgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSBmb3NzaWwgcmVjb3JkLlxcblxcbihjKSBPcmdhbmlzbXM6IFRoaXMgaXMgYSBzdGVwIHRvd2FyZHMgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgaXQncyBub3QgdGhlIG1vc3Qgc3BlY2lmaWMuIEZvc3NpbHMgb3IgY2hlbWljYWwgbWFya2VycyBjYW4gaW5kZWVkIHNob3cgd2hlcmUgdmFyaW91cyBvcmdhbmlzbXMgb25jZSBsaXZlZCwgYnV0IG5vdCBhbGwgcGFzdCBsaWZlIGlzIHJlcHJlc2VudGVkIGJ5IGRpcmVjdCBmb3NzaWwgZXZpZGVuY2UuXFxuXFxuKGYpIERlZm9yZXN0YXRpb246IFRoaXMgcmVmZXJzIHRvIGEgY3VycmVudCBlbnZpcm9ubWVudGFsIHByb2Nlc3MsIG5vdCBwYXN0IGxpZmUuIEl0IGluZGljYXRlcyBjaGFuZ2VzIGluIGVjb3N5c3RlbXMgd2l0aGluIHRoZSByZWNlbnQgcGFzdCBidXQgZG9lc24ndCBzcGVjaWZpY2FsbHkgYWRkcmVzcyB3aGljaCBsaWZlIGZvcm1zIGV4aXN0ZWQgdGhlcmUgaW4gdGhlIHBhc3QuXFxuXFxuKGcpIFJlaW5jYXJuYXRpb246IExpa2UgJ3NvdWxzLCcgdGhpcyBpcyBhIHNwaXJpdHVhbCBvciBtZXRhcGh5c2ljYWwgY29uY2VwdCwgbm90IGdyb3VuZGVkIGluIGJpb2xvZ2ljYWwgZXZpZGVuY2UuIEJpb2xvZ3kgY29uY2VybnMgaXRzZWxmIHdpdGggb2JzZXJ2YWJsZSBhbmQgc2NpZW50aWZpY2FsbHkgdGVzdGFibGUgcGhlbm9tZW5hLlxcblxcbihoKSBJbXBvcnRhbnQgaGFiaXRhdHM6IFRoaXMgaXMgdG9vIHZhZ3VlLiBXaGlsZSBpdCBjb3VsZCBiZSB0aWVkIHRvIHRoZSB0eXBlcyBvZiBvcmdhbmlzbXMgdGhhdCB1c2VkIHRvIGxpdmUgaW4gYSBwbGFjZSwgdGhlIHBocmFzZSBjb3VsZCBpbXBseSBhIHZhcmlldHkgb2YgdW5yZWxhdGVkIGNvbnRleHRzLCBhbmQgZG9lc24ndCBkaXJlY3RseSBzdGF0ZSB3aGF0IHR5cGVzIG9mIGxpZmUgZXhpc3RlZC5cXG5cXG5UaGVyZWZvcmUsIHRoZSBtb3N0IGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlIGFuc3dlciBpcyAoZCkgUGxhbnQgb3IgYW5pbWFsLiBFdmlkZW5jZSBpbiB0aGUgZm9ybSBvZiBmb3NzaWxzLCB0cmFjZSBmb3NzaWxzLCBhbmQgaW1wcmludHMgY2FuIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiB2YXJpb3VzIGxpZmUgZm9ybXMsIGluY2x1ZGluZyBib3RoIHBsYW50cyBhbmQgYW5pbWFscywgaW4gYSBwYXJ0aWN1bGFyIHBsYWNlIHdoZXJlIHRoZXkgb25jZSBsaXZlZC4gVGhpcyBjb3ZlcnMgYSBicm9hZCByYW5nZSBvZiBwYXN0IGxpZmUgaW4gYSBzY2llbnRpZmljYWxseSBncm91bmRlZCBtYW5uZXIsIGFja25vd2xlZGdpbmcgY29udHJpYnV0aW9ucyBmcm9tIGJvdGggcGxhbnQgYW5kIGFuaW1hbCBraW5nZG9tcy5cIn0ifV0sICI2IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogSG93IHRyYWl0cyBhcmUgcGFzc2VkIGRvd24sIG9yIGluaGVyaXRlZCwgaXMgZm91bmQgaW4gaW5mb3JtYXRpb24gaW4gYW4gb3JnYW5pc20ncyB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBTcGVjaWVzIChiKSBNZXNzZW5nZXJzIChjKSBIYWlyIGZvbGxpY2xlcyAoZCkgQ3ljbGVzIChlKSBTa2luIGNlbGxzIChmKSBFbmRvY3JpbmUgc3lzdGVtIChnKSBDaHJvbW9zb21lcyAoaCkgUHJvdGVpbnMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImdcIiwgXCJyZWFzb25pbmdcIjogXCJUaGUgY29ycmVjdCBhbnN3ZXIgaXMgKGcpIENocm9tb3NvbWVzLlxcblxcbkxldCdzIGV4YW1pbmUgd2h5IHRoZSBvdGhlciBvcHRpb25zIGFyZSBpbmNvcnJlY3Q6XFxuXFxuKGEpIFNwZWNpZXM6IFNwZWNpZXMgaXMgYSBjbGFzc2lmaWNhdGlvbiBzeXN0ZW0gdXNlZCBieSBiaW9sb2dpc3RzIHRvIGdyb3VwIHRvZ2V0aGVyIHNpbWlsYXIgb3JnYW5pc21zLiBXaGlsZSBzcGVjaWVzIGFyZSByZWxhdGVkIGluIHRlcm1zIG9mIHRoZWlyIGdlbmV0aWNzLCB0aGV5IGRvIG5vdCBjb250YWluIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBhbiBpbmRpdmlkdWFsJ3MgaW5oZXJpdGVkIHRyYWl0cy5cXG5cXG4oYikgTWVzc2VuZ2VyczogVGhpcyBvcHRpb24gY291bGQgcmVmZXIgdG8gc2lnbmFscyBvciBjb21tdW5pY2F0aW9uIHN5c3RlbXMgd2l0aGluIGFuIG9yZ2FuaXNtLCBidXQgaXQgZG9lcyBub3QgdHlwaWNhbGx5IHJlbGF0ZSB0byB0aGUgZ2VuZXRpYyBpbmZvcm1hdGlvbiByZXNwb25zaWJsZSBmb3IgaW5oZXJpdGVkIHRyYWl0cy4gXFxuXFxuKGMpIEhhaXIgZm9sbGljbGVzOiBIYWlyIGZvbGxpY2xlcyBhcmUgc3RydWN0dXJlcyBpbiB0aGUgc2tpbiB0aGF0IHByb2R1Y2UgaGFpci4gVGhleSBkb24ndCBjb250YWluIGdlbmV0aWMgaW5mb3JtYXRpb24gYWJvdXQgdHJhaXRzOyByYXRoZXIsIHRoZXkncmUgYSByZXN1bHQgb2YgZ2VuZXRpYyBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmNvZGVkIGluIHRoZSBjaHJvbW9zb21lcy5cXG5cXG4oZCkgQ3ljbGVzOiBCaW9sb2dpY2FsIGN5Y2xlcywgc3VjaCBhcyBjaXJjYWRpYW4gcmh5dGhtcywgYXJlIHJlZ3VsYXIgcGF0dGVybnMgb2YgYmVoYXZpb3Igb3IgcGh5c2lvbG9naWNhbCBjaGFuZ2UuIFRoZXkgYXJlIHJlZ3VsYXRlZCBieSBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgc3RpbXVsaSwgYnV0IHRoZXkgZG9uJ3Qgc3RvcmUgZ2VuZXRpYyBpbmZvcm1hdGlvbi5cXG5cXG4oZSkgU2tpbiBjZWxsczogU2tpbiBjZWxscyBhcmUgc29tYXRpYyBjZWxscyB0aGF0IGNvbnN0aXR1dGUgdGhlIG91dGVyIGxheWVyIG9mIHRoZSBza2luLiBUaGV5IGNvbnRhaW4gZ2VuZXRpYyBtYXRlcmlhbCwgYnV0IHRoZXkgZG8gbm90IGhvbGQgdGhlIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgaG93IHRyYWl0cyB3aWxsIGJlIGV4cHJlc3NlZCAtIHRoYXQgaW5mb3JtYXRpb24gaXMgZm91bmQgaW4gdGhlIEROQSwgbm90YWJseSB3aXRoaW4gY2hyb21vc29tZXMuXFxuXFxuKGYpIEVuZG9jcmluZSBzeXN0ZW06IFRoZSBlbmRvY3JpbmUgc3lzdGVtIGlzIGEgZ3JvdXAgb2YgZ2xhbmRzIHRoYXQgc2VjcmV0ZSBob3Jtb25lcywgd2hpY2ggcmVndWxhdGUgdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIGJvZHkuIEl0IGNvbnRyb2xzIG1hbnkgYXNwZWN0cyBvZiBvdXIgYm9keSBmdW5jdGlvbnMgYnV0IGRvZXNuJ3Qgc3RvcmUgZ2VuZXRpYyBpbmZvcm1hdGlvbi5cXG5cXG4oaCkgUHJvdGVpbnM6IFByb3RlaW5zIGFyZSBlc3NlbnRpYWwgbW9sZWN1bGVzIHRoYXQgcGxheSBtYW55IHJvbGVzIGluIHRoZSBib2R5LCBpbmNsdWRpbmcgYWN0aW5nIGFzIGVuenltZXMsIHN0cnVjdHVyYWwgY29tcG9uZW50cywgYW5kIHNpZ25hbGluZyBtb2xlY3VsZXMuIFRoZXkncmUgY3JlYXRlZCBiYXNlZCBvbiBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgRE5BIGJ1dCBkbyBub3QgY29udGFpbiB0aGUgZ2VuZXRpYyBpbmZvcm1hdGlvbiBpdHNlbGYuXFxuXFxuSW4gc3VtbWFyeSwgY2hyb21vc29tZXMgYXJlIHRoZSBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgY2VsbCBudWNsZXVzIHRoYXQgY2FycnkgdGhlIGdlbmV0aWMgbWF0ZXJpYWwgKEROQSksIHdoaWNoIGluY2x1ZGVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBvcmdhbmlzbSdzIHRyYWl0cy4gVGhlIG90aGVyIG9wdGlvbnMgYXJlIGluY29ycmVjdCBiZWNhdXNlIHRoZXkgcmVmZXIgdG8gZW50aXRpZXMsIHByb2Nlc3Nlcywgb3IgbWVjaGFuaXNtcyB0aGF0IGRvIG5vdCBzdG9yZSBvciBkaXJlY3RseSBjb250YWluIHRoZSBnZW5ldGljIGluZm9ybWF0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpbmhlcml0ZWQgdHJhaXRzLlwifSJ9XSwgIjciOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbWFqb3IgcHJvZHVjZXJzIGluIHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uP1xuQW5zd2VyIENob2ljZXM6IChhKSBHcmFzcyAoYikgQW5pbWFscyAoYykgQXBwbGVzIChkKSBQb3RhdG9lcyAoZSkgVHJlZXMgKGYpIFBsYW50cyAoZykgRnVuZ2kgKGgpIEZpZWxkcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZlwiLCBcInJlYXNvbmluZ1wiOiBcIjEuICoqR3Jhc3MgKGEpKiogLSBXaGlsZSBncmFzcyBpcyBpbmRlZWQgYSBwcm9kdWNlciwgb3IgYXV0b3Ryb3BoaWMgb3JnYW5pc20sIGluIHRoZSBiaW9sb2dpY2FsIHNlbnNlLCBpdCBpc24ndCB0eXBpY2FsbHkgZW1waGFzaXplZCBhcyBhIG1ham9yIHByb2R1Y2VyIGluIHRoZSBjb250ZXh0IG9mIHRoZSBxdWVzdGlvbiBiZWNhdXNlIGl0IGlzIG1vcmUgY29tbW9uIGFuZCBsZXNzIHZhcmllZCB0aGFuIG90aGVyIHBsYW50IGZvcm1zLlxcblxcbjIuICoqQW5pbWFscyAoYikqKiAtIEFuaW1hbHMgYXJlIGNvbnN1bWVycyAoaGV0ZXJvdHJvcGhzKSB0aGF0IGNhbm5vdCBwcm9kdWNlIHRoZWlyIG93biBmb29kLCBzbyB0aGV5IGFyZSBub3QgcHJvZHVjZXJzLlxcblxcbjMuICoqQXBwbGVzIChjKSoqIC0gTGlrZSBncmFzcywgYXBwbGVzIGFyZSBhIHR5cGUgb2YgcGxhbnQgcHJvZHVjdCwgYnV0IHRoZXkgYXJlIGRlcml2ZWQgZnJvbSBwcm9kdWNlcnMgKHRyZWVzIGJlYXJpbmcgYXBwbGVzKSwgbm90IHByb2R1Y2VycyB0aGVtc2VsdmVzLlxcblxcbjQuICoqUG90YXRvZXMgKGQpKiogLSBQb3RhdG9lcyBhcmUgYW4gYWdyaWN1bHR1cmFsIGNyb3AsIGFuZCBsaWtlIGFwcGxlcywgdGhleSBhcmUgZGVyaXZlZCBmcm9tIHBsYW50cy4gVGhleSdyZSBub3QgcHJvZHVjZXJzLCBidXQgdGhlIHByb2R1Y2VycyBhcmUgdGhlIHBvdGF0byBwbGFudHMuXFxuXFxuNS4gKipGaWVsZHMgKGgpKiogLSBBIGZpZWxkIHJlZmVycyB0byBhbiBhZ3JpY3VsdHVyYWwgYXJlYSB3aGVyZSBjcm9wcyBhcmUgZ3Jvd24uIEl0J3Mgbm90IGEgcHJvZHVjZXIgaXRzZWxmLCBidXQgY2FuIGNvbnRhaW4gcHJvZHVjZXJzIHN1Y2ggYXMgZ3JhaW5zLCB2ZWdldGFibGVzLCBvciBvdGhlciBjcm9wcy5cXG5cXG42LiAqKlBsYW50cyAoZikqKiAtIFRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyLiBQbGFudHMsIGluIGdlbmVyYWwsIGFyZSBwcm9kdWNlcnMgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBwaG90b3N5bnRoZXNpcywgd2hpY2ggY29udmVydHMgbGlnaHQgZW5lcmd5IGludG8gY2hlbWljYWwgZW5lcmd5IHRoYXQgY2FuIGJlIGxhdGVyIHJlbGVhc2VkIHRvIGZ1ZWwgdGhlIG9yZ2FuaXNtJ3MgYWN0aXZpdGllcy5cXG5cXG43LiAqKkZ1bmdpIChnKSoqIC0gQWx0aG91Z2ggZnVuZ2kgYXJlIGF1dG90cm9waGljLCB0aGUgcXVlc3Rpb24gc3BlY2lmaWNhbGx5IHJlZmVycyB0byAndGVtcGVyYXR1cmUgYW5kIHByZWNpcGl0YXRpb24nIGFzIG1ham9yIGZhY3RvcnMuIFdoaWxlIGZ1bmdpIGNhbiBpbmRlZWQgcGhvdG9zeW50aGVzaXplIChsaWtlIGFsZ2FlKSwgdGhleSBhcmUgb2Z0ZW4gY29uc2lkZXJlZCBkZWNvbXBvc2VycywgbW9yZSByZWxldmFudCB0byB0ZW1wZXJhdHVyZSBhbmQgd2FzdGUgY3ljbGluZyBpbiBhbiBlY29zeXN0ZW0gcmF0aGVyIHRoYW4gcHJpbWFyeSBwcm9kdWNlcnMuXFxuXFxuSW4gY29uY2x1c2lvbiwgdGhlIHByaW1hcnkgcHJvZHVjZXJzIGFyZSAqKnBsYW50cyoqIGJlY2F1c2UgdGhleSBhcmUgdGhlIG1haW4gZW50aXRpZXMgY2FwYWJsZSBvZiBjb252ZXJ0aW5nIHN1bmxpZ2h0LCBjYXJib24gZGlveGlkZSwgYW5kIHdhdGVyIGludG8gY29tcGxleCBzdWdhcnMgdGhyb3VnaCBwaG90b3N5bnRoZXNpcywgdXNpbmcgdGVtcGVyYXR1cmUgYW5kIGxpZ2h0IChhIGNvbXBvbmVudCBvZiBwcmVjaXBpdGF0aW9uIGVmZmVjdHMgdmlhIGV2YXBvdHJhbnNwaXJhdGlvbikgYXMgcHJpbWFyeSBmYWN0b3JzLiBBbmltYWxzLCBmdW5naSwgYXBwbGVzLCBwb3RhdG9lcywgYW5kIGZpZWxkcyBkbyBub3QgZGlyZWN0bHkgZW5nYWdlIGluIHRoaXMgcHJvY2VzcyBpbiB0aGUgc2FtZSB3YXkgYXMgcGxhbnRzLCBhbmQgdGh1cywgYXJlIG5vdCBwcmltYXJ5IHByb2R1Y2Vycy5cIn0ifV0sICI4IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBkb2VzIGJlaW5nIGJ1cmllZCB1bmRlciBzb2lsIGFuZCBtdWQgY2hhbmdlIHZlZ2V0YXRpb24gaW50bz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU2NhcmNlIHJlc291cmNlcyAoYikgSGFybWZ1bCBzdWJzdGFuY2VzIChjKSBTY2FycyAoZCkgRm9zc2lsIGZ1ZWxzIChlKSBTZWRpbWVudCAoZikgU29tZXRoaW5nIHRvIG1vdmUgKGcpIE1hZ2ljIChoKSBQaWNuaWNzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJkXCIsIFwicmVhc29uaW5nXCI6IFwiYSkgU2NhcmNlIHJlc291cmNlcyAtIFRoaXMgb3B0aW9uIHN1Z2dlc3RzIHRoYXQgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBtYWtlcyB2ZWdldGF0aW9uIHNjYXJjZSByZXNvdXJjZXMuIFRoaXMgaXMgbm90IGNvcnJlY3QgYmVjYXVzZSBzb2lsIGFuZCBtdWQgYmVpbmcgYSBidXJpYWwgbG9jYXRpb24gZG9lcyBub3QgaW1wbHkgdGhlIHZlZ2V0YXRpb24gaXQgY29udGFpbnMgYmVjb21lcyBzY2FyY2UuIFRoZSB2ZWdldGF0aW9uIGl0c2VsZiB3b3VsZG4ndCBiZWNvbWUgc2NhcmNlIGR1ZSB0byBidXJpYWw7IHJhdGhlciwgaXQgbWF5IGNvbnRyaWJ1dGUgdG8gdGhlIGZvcm1hdGlvbiBvZiBmb3NzaWwgZnVlbHMuXFxuXFxuYikgSGFybWZ1bCBzdWJzdGFuY2VzIC0gVmVnZXRhdGlvbiBidXJpZWQgaW4gc29pbCBhbmQgbXVkIGRvZXMgbm90IHR1cm4gaW50byBoYXJtZnVsIHN1YnN0YW5jZXMuIFdoaWxlIGl0J3MgdHJ1ZSB0aGF0IG92ZXIgZ2VvbG9naWNhbCB0aW1lc2NhbGVzLCBkZWNvbXBvc2l0aW9uIHByb2Nlc3NlcyBjYW4gcHJvZHVjZSB2YXJpb3VzIHN1YnN0YW5jZXMsIHRoZSBpbW1lZGlhdGUgcmVzdWx0IG9mIGJ1cmlhbCBpc24ndCB0aGUgY3JlYXRpb24gb2YgaGFybWZ1bCBzdWJzdGFuY2VzLiBUaGUgY29ycmVjdCBhbnN3ZXIgaW52b2x2ZXMgYSBwcm9jZXNzIHRoYXQgbGVhZHMgdG8gYSBtb3JlIGNvbXBsZXggZm9zc2lsIGZ1ZWwsIG5vdCBqdXN0IGhhcm1mdWwgc3Vic3RhbmNlcy5cXG5cXG5jKSBTY2FycyAtIFRoaXMgYW5zd2VyIGNob2ljZSBzdWdnZXN0cyB0aGUgdmVnZXRhdGlvbiB0cmFuc2Zvcm1zIGludG8gc2NhcnMuIFNjYXJzIGFyZSBpbmp1cmllcyBvciB3b3VuZHMgb24gYW4gb3JnYW5pc20sIGFuZCB0aGVyZSBpcyBubyBiaW9sb2dpY2FsIG9yIGdlb2xvZ2ljYWwgcHJvY2VzcyBieSB3aGljaCBidXJpYWwgdW5kZXIgc29pbCBhbmQgbXVkIHdvdWxkIHR1cm4gdmVnZXRhdGlvbiBpbnRvIHNjYXJzLlxcblxcbmYpIFNvbWV0aGluZyB0byBtb3ZlIC0gVGhpcyBhbnN3ZXIgaW1wbGllcyB0aGF0IHRoZSByZXN1bHQgb2YgdGhlIGJ1cmlhbCBwcm9jZXNzIGlzIHNvbWV0aGluZyB1c2VkIGZvciBtb3ZlbWVudC4gSG93ZXZlciwgZm9zc2lsIGZ1ZWxzLCBmb3JtZWQgb3ZlciBtaWxsaW9ucyBvZiB5ZWFycywgYXJlbid0IHVzZWQgZGlyZWN0bHkgZm9yIG1vdmVtZW50IGJ1dCBhcmUgc291cmNlcyBvZiBlbmVyZ3kgd2hlbiBjb21idXN0ZWQuIFRoZXkgZG9uJ3QgYmVjb21lJ3NvbWV0aGluZyB0byBtb3ZlJyBpbiBhbnkgaW1tZWRpYXRlIG9yIGRpcmVjdCBzZW5zZS5cXG5cXG5nKSBNYWdpYyAtIFRoaXMgb3B0aW9uIGlzIG5vdCBhIHNjaWVudGlmaWMgb3IgZmFjdHVhbCBhbnN3ZXIuIFRoZSBwcm9jZXNzIG9mIGhvdyB2ZWdldGF0aW9uIHRyYW5zZm9ybXMgaW50byBmb3NzaWwgZnVlbHMgaXMgYSBuYXR1cmFsIGdlb2xvZ2ljYWwgcHJvY2Vzcywgbm90IGEgbWFnaWNhbCBvbmUuXFxuXFxuaCkgUGljbmljcyAtIFRoaXMgb3B0aW9uIGlzIGNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSBiaW9sb2dpY2FsIG9yIGdlb2xvZ2ljYWwgcHJvY2VzcyBkZXNjcmliZWQgaW4gdGhlIHF1ZXN0aW9uLiBQaWNuaWMgaXRlbXMgYXJlIGh1bWFuLW1hZGUgYW5kIGRvbid0IHJlc3VsdCBmcm9tIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiBkZWFkIHBsYW50IG1hdGVyaWFsLlxcblxcblNvIHRoZSBjb3JyZWN0IGFuc3dlciBpcyAoZCkgRm9zc2lsIGZ1ZWxzLCBiZWNhdXNlIHRoaXMgaXMgdGhlIG5hdHVyYWwgcHJvY2VzcyBieSB3aGljaCBkZWFkIHZlZ2V0YXRpb24gYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBiZWNvbWVzIHBhcnQgb2YgdGhlIGZvc3NpbCBmdWVsIGRlcG9zaXRzLiBGb3NzaWwgZnVlbHMgZm9ybSBmcm9tIHRoZSByZW1haW5zIG9mIGRlYWQgcGxhbnRzIGFuZCBhbmltYWxzIHRoYXQgaGF2ZSBiZWVuIGJ1cmllZCBhbmQgc3ViamVjdGVkIHRvIGltbWVuc2UgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciBtaWxsaW9ucyBvZiB5ZWFycy5cIn0ifV0sICI5IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hlbiB3aWxsIGFuaW1hbHMgbW92ZSB0byBhbm90aGVyIGFyZWE/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFRvIGtlZXAgdGhlaXIgYm9keSBoZWF0LiAoYikgUmV1c2luZyBtYXRlcmlhbHMgKGMpIElmIHRoZXkgY2FuIG5vIGxvbmdlciBnZXQgZm9vZCAoZCkgSWYgdGhleSBhcmUgYm9yZWQgKGUpIE1hcnNoZXMgYW5kIHN3YW1wcyAoZikgSWYgdGhleSBoYXZlIHRvbyBtdWNoIG1vbmV5IChnKSBXYXJtIGFpciBtb3ZpbmcgaW50byBjb2xkIGFpciAoaCkgSWYgdGhleSBoYXZlIHRvbyBtdWNoIGZvb2QifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIiwgXCJyZWFzb25pbmdcIjogXCJXaGVuIGFuaW1hbHMgbW92ZSB0byBhbm90aGVyIGFyZWEsIGl0J3Mgbm90IGR1ZSB0bzpcXG5cXG4oYSkgS2VlcGluZyB0aGVpciBib2R5IGhlYXQgLSBUaGlzIGlzIHR5cGljYWxseSBpbmZsdWVuY2VkIGJ5IHNlYXNvbmFsIGNoYW5nZXMgb3Igd2VhdGhlciBjb25kaXRpb25zLCBub3QgdGhlIHBoeXNpY2FsIGFjdCBvZiBtb3ZpbmcgdG8gYW5vdGhlciBhcmVhLiBXaGlsZSB0ZW1wZXJhdHVyZSBjYW4gYmUgYSBmYWN0b3IgaW4gbWlncmF0aW9uLCBpdCBkb2Vzbid0IGRyaXZlIHRoZSBkZWNpc2lvbiBmb3IgdGhlIG1vdmVtZW50IGl0c2VsZi5cXG5cXG4oYikgUmV1c2luZyBtYXRlcmlhbHMgLSBUaGlzIG9wdGlvbiByZWZlcnMgdG8gcmVjeWNsaW5nIG9yIHJldXNpbmcgcGh5c2ljYWwgb2JqZWN0cyBhbmQgaGFzIG5vIGRpcmVjdCBjb3JyZWxhdGlvbiB0byBhbmltYWwgbWlncmF0aW9uIG9yIG1vdmVtZW50LlxcblxcbihkKSBCZWluZyBib3JlZCAtIEJvcmVkb20gaXMgYSBodW1hbiBjb25zdHJ1Y3QgYW5kIGRvZXNuJ3QgZGlyZWN0bHkgYXBwbHkgdG8gYW5pbWFscycgYmVoYXZpb3JhbCBkZWNpc2lvbnMuIEFuaW1hbHMgYXJlIGRyaXZlbiBieSBpbnN0aW5jdHMgYW5kIGJhc2ljIG5lZWRzIHJhdGhlciB0aGFuIGJvcmVkb20uXFxuXFxuKGYpIEhhdmluZyB0b28gbXVjaCBtb25leSAtIFRoaXMgaXMgYW4gZWNvbm9taWMgY29uY2VwdCB0aGF0IGRvZXNuJ3QgYXBwbHkgdG8gYW5pbWFscywgYXMgdGhleSBkb24ndCBoYXZlIGN1cnJlbmN5IG9yIGZpbmFuY2lhbCByZXNvdXJjZXMuXFxuXFxuKGUpIE1hcnNoZXMgYW5kIHN3YW1wcyAtIFRoZXNlIGFyZSBzcGVjaWZpYyB0eXBlcyBvZiBlY29zeXN0ZW1zLCBhbmQgd2hpbGUgYW5pbWFscyBtYXkgaW5oYWJpdCB0aGVzZSBhcmVhcyBvciBtb3ZlIHRvIHRoZW0gZm9yIHZhcmlvdXMgcmVhc29ucywgbWVyZWx5IGV4cGxhaW5pbmcgd2hlcmUgdGhleSBtaWdodCBnbyBkb2Vzbid0IGFkZHJlc3Mgd2h5IHRoZXkgbW92ZS5cXG5cXG4oZykgV2FybSBhaXIgbW92aW5nIGludG8gY29sZCBhaXIgLSBUaGlzIGRlc2NyaWJlcyBhdG1vc3BoZXJpYyBwaGVub21lbmEgYW5kIGRvZXMgbm90IGluZmx1ZW5jZSB0aGUgbW92ZW1lbnQgb2YgYW5pbWFscy5cXG5cXG4oaCkgSGF2aW5nIHRvbyBtdWNoIGZvb2QgLSBXaGlsZSBhbmltYWxzIG1pZ2h0IG1pZ3JhdGUgdG8gYXZvaWQgYXJlYXMgb2Ygb3Zlci1jb21wZXRpdGlvbiBmb3IgZm9vZCByZXNvdXJjZXMsIHRoZSBwaHJhc2UgJ3RvbyBtdWNoIGZvb2QnIGlzIG5vdCBhIGxvZ2ljYWwgbW90aXZhdG9yIGZvciBtb3ZpbmcgdG8gYSBuZXcgYXJlYS4gVG9vIG11Y2ggZm9vZCB3b3VsZCBtZWFuIHRoZXkncmUgYWxyZWFkeSBpbiBhIGdvb2QgbG9jYXRpb24sIG5lZ2F0aW5nIHRoZSBuZWVkIGZvciBtaWdyYXRpb24uXFxuXFxuKGMpIElmIHRoZXkgY2FuIG5vIGxvbmdlciBnZXQgZm9vZCAtIFRoaXMgaXMgY29ycmVjdCBiZWNhdXNlIGFuaW1hbHMgb2Z0ZW4gbWlncmF0ZSBpbiByZXNwb25zZSB0byBzY2FyY2l0eSBpbiB0aGVpciBjdXJyZW50IGhhYml0YXQuIEluYWRlcXVhdGUgZm9vZCBhdmFpbGFiaWxpdHkgY2FuIGxlYWQgdG8gc3RhcnZhdGlvbiwgcHJvbXB0aW5nIGEgbW92ZW1lbnQgdG8gYXJlYXMgd2hlcmUgcmVzb3VyY2VzIGFyZSBtb3JlIGFidW5kYW50LiBUaGV5IGFyZSBzZWVraW5nIHRvIGVuc3VyZSB0aGVpciBzdXJ2aXZhbCBhbmQgcmVwcm9kdWN0aW9uLlxcblxcblRoZXJlZm9yZSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzIChjKSBhcyBpdCBpcyB0aGUgbW9zdCBsb2dpY2FsIGV4cGxhbmF0aW9uIGZvciBhbmltYWwgbW92ZW1lbnQgdG8gYW5vdGhlciBhcmVhIGJhc2VkIG9uIHN1cnZpdmFsIG5lZWRzLCBwYXJ0aWN1bGFybHkgZm9vZCBhdmFpbGFiaWxpdHkuXCJ9In1dLCAiMTAiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBBIGZpcmVjcmFja2VyIGNvbnZlcnRzIGNoZW1pY2FsIGVuZXJneSBpbnRvIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEtpbmV0aWMgZW5lcmd5IChiKSBMb3VkIG5vaXNlcyAoYykgVmlicmF0aW5nIHdhdmVzIChkKSBBbiBvYmplY3QgaXMgc2VlbiAoZSkgRWxlY3Ryb21hZ25ldGljIGVuZXJneSAoZikgRGVveHlyaWJvbnVjbGVpYyBhY2lkIChnKSBIeWRyb2dlbiBhbmQgb3h5Z2VuIChoKSBIYXJtZnVsIHN1YnN0YW5jZXMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIiwgXCJyZWFzb25pbmdcIjogXCIxLiBSZWFkIHRoZSBxdWVzdGlvbjogJ0EgZmlyZWNyYWNrZXIgY29udmVydHMgY2hlbWljYWwgZW5lcmd5IGludG8gd2hhdD8nXFxuICAgIC0gVGhlIHF1ZXN0aW9uIGFza3MgYWJvdXQgdGhlIGZvcm0gb2YgZW5lcmd5IHRoYXQgYSBmaXJlY3JhY2tlciB0cmFuc2Zvcm1zIGNoZW1pY2FsIGVuZXJneSBpbnRvLlxcblxcbjIuIElkZW50aWZ5IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIG9wdGlvbnM6XFxuICAgLSBhKSBLaW5ldGljIGVuZXJneVxcbiAgIC0gYikgTG91ZCBub2lzZXNcXG4gICAtIGMpIFZpYnJhdGluZyB3YXZlc1xcbiAgIC0gZCkgQW4gb2JqZWN0IGlzIHNlZW5cXG4gICAtIGUpIEVsZWN0cm9tYWduZXRpYyBlbmVyZ3lcXG4gICAtIGYpIERlb3h5cmlib251Y2xlaWMgYWNpZFxcbiAgIC0gZykgSHlkcm9nZW4gYW5kIG94eWdlblxcbiAgIC0gaCkgSGFybWZ1bCBzdWJzdGFuY2VzXFxuXFxuMy4gRGV0ZXJtaW5lIHdoaWNoIG9wdGlvbnMgYXJlIG5vdCBsb2dpY2FsIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlOlxcbiAgIC0gS2luZXRpYyBlbmVyZ3kgY291bGQgYmUgYSByZXN1bHQgb2YgdGhlIGZpcmVjcmFja2VyJ3MgZXhwbG9zaW9uLCBidXQgaXQgaXMgbm90IHRoZSBtb3N0IGRpcmVjdCBvciBzcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbi5cXG4gICAtIExvdWQgbm9pc2VzIGFyZSBhIGJ5cHJvZHVjdCBidXQgZG8gbm90IHJlcHJlc2VudCBlbmVyZ3kuXFxuICAgLSBWaWJyYXRpbmcgd2F2ZXMgbWF5IHJlc3VsdCBmcm9tIHRoZSBleHBsb3Npb24sIGJ1dCB0aGV5IGFyZSBhbHNvIGEgYnlwcm9kdWN0IHJhdGhlciB0aGFuIHRoZSBwcmltYXJ5IGNvbnZlcnRlZCBlbmVyZ3kuXFxuICAgLSBBbiBvYmplY3QgaXMgc2VlbjogVGhpcyBpcyBub3QgYSBmb3JtIG9mIGVuZXJneS5cXG4gICAtIEVsZWN0cm9tYWduZXRpYyBlbmVyZ3kgaXMgbm90IHRoZSBwcmltYXJ5IGZvcm0gb2YgZW5lcmd5IGNvbnZlcnNpb24gaW4gYSBmaXJlY3JhY2tlci5cXG4gICAtIERlb3h5cmlib251Y2xlaWMgYWNpZCAoRE5BKSBpcyBvcmdhbmljIG1hdGVyaWFsIGFuZCBpcyBub3QgcmVsYXRlZCB0byB0aGUgZW5lcmd5IGNvbnZlcnNpb24gYXQgcGxheS5cXG4gICAtIEh5ZHJvZ2VuIGFuZCBveHlnZW4gYXJlIGVsZW1lbnRzIHByb2R1Y2VkIGluIHRoZSBjaGVtaWNhbCByZWFjdGlvbiBidXQgbm90IHRoZSBmb3JtIG9mIGVuZXJneSBpdHNlbGYuXFxuICAgLSBIYXJtZnVsIHN1YnN0YW5jZXMgYXJlIGJ5cHJvZHVjdHMgYnV0IG5vdCB0aGUgZm9ybSBvZiBlbmVyZ3kuXFxuXFxuNC4gVGhlIGNvcnJlY3QgYW5zd2VyIGlzIChjKTpcXG4gICAtIFZpYnJhdGluZyB3YXZlczogV2hpbGUgZmlyZWNyYWNrZXJzIGRvIGluZGVlZCBwcm9kdWNlIHZpYnJhdGlvbnMgKHdoaWNoIGNhbiBmZWx0IG9yIGhlYXJkIGFzIHNvdW5kKSwgdGhlIG1vc3QgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbmVyZ3kgdHJhbnNmb3JtYXRpb24gaXMgbm90IGxpc3RlZCBkaXJlY3RseS5cXG5cXG41LiBFeHBsYW5hdGlvbiBvZiB3aHkgb3RoZXIgb3B0aW9ucyBhcmUgaW5jb3JyZWN0OlxcbiAgIC0gYSkgS2luZXRpYyBlbmVyZ3k6IFdoaWxlIGtpbmV0aWMgZW5lcmd5IGlzIGludm9sdmVkIGluIHRoZSBleHBsb3Npb24sIGl0IGlzIG5vdCB0aGUgaW1tZWRpYXRlIGFuZCBwcmltYXJ5IGNvbnZlcnNpb24gZm9ybS5cXG4gICAtIGIpIExvdWQgbm9pc2VzOiBUaGlzIGlzIGEgcmVzdWx0IG9mIHRoZSBleHBsb3Npb24gYnV0IG5vdCBhIGZvcm0gb2YgZW5lcmd5LlxcbiAgIC0gZCkgQW4gb2JqZWN0IGlzIHNlZW46IFRoaXMgc3RhdGVtZW50IGlzIGlycmVsZXZhbnQgdG8gZW5lcmd5IGNvbnZlcnNpb24uXFxuICAgLSBlKSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5OiBBbHRob3VnaCByZWxhdGVkIHRvIHRoZSBlbmVyZ3kgcmVsZWFzZWQgZHVyaW5nIHRoZSBleHBsb3Npb24gKGxpZ2h0IGFuZCBzb3VuZCksIGl0IGlzIG5vdCB0aGUgbW9zdCBkaXJlY3QgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnZlcnNpb24gZnJvbSBjaGVtaWNhbCB0byBhbm90aGVyIGZvcm0uXFxuICAgLSBmKSBEZW94eXJpYm9udWNsZWljIGFjaWQgKEROQSk6IE5vdCByZWxhdGVkIHRvIHRoZSBlbmVyZ3kgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcy5cXG4gICAtIGcpIEh5ZHJvZ2VuIGFuZCBveHlnZW46IFByb2R1Y2VkIGVsZW1lbnRzIGJ1dCBub3QgZm9ybXMgb2YgZW5lcmd5LlxcbiAgIC0gaCkgSGFybWZ1bCBzdWJzdGFuY2VzOiBCeXByb2R1Y3RzIGJ1dCBub3QgZm9ybXMgb2YgZW5lcmd5LlxcblxcbkluIGNvbmNsdXNpb24sIHdoaWxlIGEgZmlyZWNyYWNrZXIgcHJpbWFyaWx5IGNvbnZlcnRzIGNoZW1pY2FsIGVuZXJneSBpbnRvIGtpbmV0aWMgZW5lcmd5IGFuZCB2aWJyYXRpb25zIChzb3VuZCB3YXZlcyksIHRoZSBjbG9zZXN0IG9wdGlvbiBwcm92aWRlZCBpcyAoYykgVmlicmF0aW5nIHdhdmVzLCBpbmRpY2F0aW5nIHRoZSBtb3N0IGV2aWRlbnQgcGh5c2ljYWwgZWZmZWN0IGFuZCBmb3JtIG9mIGVuZXJneSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGNoZW1pY2FsIGVuZXJneSBhdCB0aGUgZWxlbWVudGFyeSBsZXZlbC5cIn0ifV0sICIxMSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgaXMgdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgTWFqb3IgZWZmZWN0cyAoYikgUmVzcGlyYXRpb24gKGMpIFJvbGV4IChkKSBEZW5zaXR5IChlKSBEaXBodGhlcmlhIChmKSBDYW5pcyBsdXB1cyAoZykgU2tpbiBjb2xvciAoaCkgRGlnZXN0aW9uIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJnXCIsIFwicmVhc29uaW5nXCI6IFwiKGEpIE1ham9yIGVmZmVjdHM6XFxuVGhpcyB0ZXJtIGNvdWxkIHBvdGVudGlhbGx5IHJlbGF0ZSB0byBnZW5ldGljcywgYnV0IGl0J3MgYSBnZW5lcmFsIHRlcm0gdGhhdCBjb3VsZCBkZXNjcmliZSB0aGUgZWZmZWN0cyBvZiBtdWx0aXBsZSBnZW5lcyBvbiBhIHBoZW5vdHlwZSwgcmF0aGVyIHRoYW4gYSBzcGVjaWZpYyByZXN1bHQuIFRodXMsIGl0J3Mgbm90IGEgZGlyZWN0IGFuc3dlciB0byB0aGUgcXVlc3Rpb24gYXNraW5nIGZvciBhIHNwZWNpZmljIHJlc3VsdCBvZiB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcy5cXG5cXG4oYikgUmVzcGlyYXRpb246XFxuUmVzcGlyYXRpb24gaXMgYSBiaW9sb2dpY2FsIHByb2Nlc3MgaW52b2x2aW5nIHRoZSBleGNoYW5nZSBvZiBnYXNlcyAob3h5Z2VuIGFuZCBjYXJib24gZGlveGlkZSkgdGhhdCBvY2N1cnMgaW4gbGl2aW5nIG9yZ2FuaXNtcy4gV2hpbGUgZ2VuZSBpbnRlcmFjdGlvbnMgY2FuIGluZmx1ZW5jZSBtZXRhYm9saWMgcHJvY2Vzc2VzIGluY2x1ZGluZyByZXNwaXJhdGlvbiwgdGhlIHRlcm0gJ3Jlc3BpcmF0aW9uJyBpdHNlbGYgaXMgbm90IGEgcmVzdWx0IGRpcmVjdGx5IHN0ZW1taW5nIGZyb20gdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuXFxuXFxuKGMpIFJvbGV4OlxcbkEgUm9sZXggaXMgYSBsdXh1cnkgd3Jpc3R3YXRjaC4gVGhpcyBvcHRpb24gaXMgaXJyZWxldmFudCB0byB0aGUgY29udGV4dCBvZiBnZW5ldGljcyBhbmQgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuXFxuXFxuKGQpIERlbnNpdHk6XFxuRGVuc2l0eSBpcyBhIHBoeXNpY2FsIHByb3BlcnR5IG9mIG1hdHRlciBhbmQgZG9lcyBub3QgZGlyZWN0bHkgcmVsYXRlIHRvIGdlbmV0aWNzIG9yIHRoZSBpbnRlcmFjdGlvbiBvZiBtdWx0aXBsZSBnZW5lcy5cXG5cXG4oZSkgRGlwaHRoZXJpYTpcXG5EaXBodGhlcmlhIGlzIGEgYmFjdGVyaWFsIGRpc2Vhc2U7IHdoaWxlIGdlbmVzIGNhbiBpbmZsdWVuY2Ugc3VzY2VwdGliaWxpdHkgdG8gY2VydGFpbiBkaXNlYXNlcywgJ2RpcGh0aGVyaWEnIGl0c2VsZiBpc24ndCBhIHJlc3VsdCBvZiB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCBnZW5lcyBidXQgcmF0aGVyIGFuIGVmZmVjdCBvZiBhIHBhdGhvZ2VuaWMgYmFjdGVyaXVtIChDb3J5bmViYWN0ZXJpdW0gZGlwaHRoZXJpYWUpLlxcblxcbihmKSBDYW5pcyBsdXB1czpcXG5DYW5pcyBsdXB1cyBpcyB0aGUgc2NpZW50aWZpYyBuYW1lIGZvciB0aGUgZ3JheSB3b2xmLCBhIHNwZWNpZXMuIFRoaXMgaXMgbm90IGEgcmVzdWx0IGFyaXNpbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gb2YgbXVsdGlwbGUgZ2VuZXMgaW4gYSBnZW5ldGljIGNvbnRleHQ7IGl0IHJlZmVycyB0byBhIHRheG9ub21pYyBjbGFzc2lmaWNhdGlvbi5cXG5cXG4oZykgU2tpbiBjb2xvcjpcXG5Ta2luIGNvbG9yIGlzIG9mdGVuIGluZmx1ZW5jZWQgYnkgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMsIGluY2x1ZGluZyB0aG9zZSByZXNwb25zaWJsZSBmb3IgdGhlIHByb2R1Y3Rpb24gb2YgbWVsYW5pbiwgd2hpY2ggZ2l2ZXMgc2tpbiBpdHMgY29sb3IuIFRoaXMgaXMgYSBkaXJlY3QgcmVzdWx0IG9mIGdlbmV0aWMgZmFjdG9ycy5cXG5cXG4oaCkgRGlnZXN0aW9uOlxcbkxpa2UgcmVzcGlyYXRpb24sIGRpZ2VzdGlvbiBpcyBhIGJpb2xvZ2ljYWwgcHJvY2VzcyBpbnZvbHZpbmcgbXVsdGlwbGUgc3RlcHMgYW5kIG9yZ2Fucy4gV2hpbGUgZ2VuZXMgY2VydGFpbmx5IHBsYXkgYSByb2xlIGluIHJlZ3VsYXRpbmcgZGlnZXN0aXZlIHByb2Nlc3NlcyAoZS5nLiwgZW56eW1lcyBpbnZvbHZlZCBpbiBkaWdlc3Rpb24pLCAnZGlnZXN0aW9uJyBhcyBhIHByb2Nlc3MgcmF0aGVyIHRoYW4gYSByZXN1bHQgb2YgZ2VuZXRpYyBpbnRlcmFjdGlvbiBpc24ndCBhcyBzcGVjaWZpYyBhcyBza2luIGNvbG9yIGZvciBhIGdlbmV0aWMgdHJhaXQncyByZXN1bHQuXFxuXFxuVGh1cywgKGcpIFNraW4gY29sb3IgaXMgdGhlIG1vc3Qgc3BlY2lmaWMgYW5kIGRpcmVjdCByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9uIG9mIHNldmVyYWwgZ2VuZXMuIEFsdGhvdWdoIG90aGVyIHByb2Nlc3NlcyAocmVzcGlyYXRpb24sIGRpZ2VzdGlvbikgbWlnaHQgYmUgaW5mbHVlbmNlZCBieSBnZW5lIGludGVyYWN0aW9ucywgdGhleSByZWZlciB0byBvbmdvaW5nIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBhIHNwZWNpZmljLCBvYnNlcnZhYmxlIG91dGNvbWUgbGlrZSBza2luIGNvbG9yLlwifSJ9XSwgIjEyIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBjYW4gZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWw/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNoZWVwIChiKSBTYWxtb24gKGMpIEdyYXNzZXMgKGQpIEJhdHMgKGUpIEFuaW1hbHMgKGYpIFNocnVicyAoZykgSHVtYW5zIChoKSBUcmVlcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYVwiLCBcInJlYXNvbmluZ1wiOiBcIihhKSAqKlNoZWVwKio6IFNoZWVwIGFyZSBoZXJiaXZvcmVzLCBwcmltYXJpbHkgZmVlZGluZyBvbiBncmFzc2VzIGFuZCBvdGhlciBwbGFudHMuIFRoZXkgdHlwaWNhbGx5IGNhbm5vdCBmZWVkIGF0IG11bHRpcGxlIHRyb3BoaWMgbGV2ZWxzLlxcblxcbihiKSAqKlNhbG1vbioqOiBXaGlsZSBzYWxtb24gY2FuIHZhcnkgaW4gdGhlaXIgZGlldCwgdGhleSBhcmUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgdG8gYmUgcHJpbWFyaWx5IHBpc2Npdm9yZXMgKGZpc2gtZWF0aW5nIHByZWRhdG9ycykgYW5kIGRvIG5vdCBmZWVkIG9uIHBsYW50cy4gVGhlcmVmb3JlLCBhbHRob3VnaCB0aGVpciBkaWV0IGNhbiBjaGFuZ2UgYmFzZWQgb24gdGhlaXIgbGlmZSBzdGFnZSwgdGhleSBkb24ndCBnZW5lcmFsbHkgZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwuXFxuXFxuKGMpICoqR3Jhc3NlcyoqOiBHcmFzc2VzIGFyZSBwbGFudHMsIHNwZWNpZmljYWxseSBtb25vY290cyB1c3VhbGx5IGZvdW5kIGluIHRoZSBvcmRlciBQb2FsZXMuIFRoZXkgYXJlIGF1dG90cm9waHMsIG1lYW5pbmcgdGhleSBwcm9kdWNlIHRoZWlyIG93biBmb29kIHRocm91Z2ggcGhvdG9zeW50aGVzaXMuIFRoZXkgZG8gbm90IGZlZWQgYXQgYW55IHRyb3BoaWMgbGV2ZWwgYmVjYXVzZSB0aGV5IGFyZSBub3QgY29uc3VtZXJzIGJ1dCBwcm9kdWNlcnMuXFxuXFxuKGQpICoqQmF0cyoqOiBCYXRzIGFyZSB0eXBpY2FsbHkgY29uc2lkZXJlZCBpbnNlY3Rpdm9yZXMsIGZlZWRpbmcgcHJpbWFyaWx5IG9uIGluc2VjdHMuIFNvbWUgYmF0IHNwZWNpZXMgYWxzbyBlYXQgZnJ1aXRzIG9yIG5lY3RhciwgYnV0IHRoZXkgZG9uJ3QgY3Jvc3MgdHJvcGhpYyBsZXZlbHMuIFRoZXkgZmVlZCBhdCBhIHNpbmdsZSB0cm9waGljIGxldmVsLCBlaXRoZXIgYXMgY29uc3VtZXJzIG9mIGluc2VjdHMgKHByaW1hcnkgY29uc3VtZXJzKSBvciBmcnVpdHMgKG9tbml2b3JlcykuXFxuXFxuKGUpICoqQW5pbWFscyoqOiBUaGlzIGlzIGEgYnJvYWQgdGVybSBlbmNvbXBhc3NpbmcgbWFueSBkaWZmZXJlbnQgb3JnYW5pc21zLCBidXQgaXQgZG9lc24ndCBzcGVjaWZpY2FsbHkgcmVmZXIgdG8gYSB0cm9waGljIGxldmVsLiBBbGwgYW5pbWFscyBhcmUgY29uc3VtZXJzIGFuZCB0aGVyZWZvcmUgYmVsb25nIHRvIGF0IGxlYXN0IG9uZSB0cm9waGljIGxldmVsLCBidXQgdGhleSBtYXkgb2NjdXB5IGRpZmZlcmVudCBsZXZlbHMgZGVwZW5kaW5nIG9uIHRoZWlyIGRpZXQuIEhvd2V2ZXIsIHRoZSBxdWVzdGlvbiBpbXBsaWVzIGEgc2luZ2xlIGxldmVsLCBzbyB0aGlzIGlzbid0IGEgc2F0aXNmYWN0b3J5IGFuc3dlci5cXG5cXG4oZikgKipTaHJ1YnMqKjogU2ltaWxhciB0byBncmFzc2VzLCBzaHJ1YnMgYXJlIGF1dG90cm9waGljIG9yZ2FuaXNtcy4gVGhleSBhcmUgY29uc3VtZXJzIG9mIGFpciBhbmQgd2F0ZXIsIHBhcnRpY3VsYXJseSBzdW5saWdodCwgdGhyb3VnaCBwaG90b3N5bnRoZXNpcy4gVGhleSBkbyBub3QgZmVlZCBhdCBhbnkgdHJvcGhpYyBsZXZlbC5cXG5cXG4oZykgKipIdW1hbnMqKjogSHVtYW5zIGFyZSBvbW5pdm9yZXMsIG1lYW5pbmcgdGhleSBjYW4gY29uc3VtZSBib3RoIHBsYW50IGFuZCBhbmltYWwgbWF0dGVyLiBXaGlsZSBpdCBtaWdodCBzZWVtIGxpa2UgdGhleSBjcm9zcyB0cm9waGljIGxldmVscyBieSBjb25zdW1pbmcgZm9vZHMgZnJvbSBkaWZmZXJlbnQgc291cmNlcywgaW5kaXZpZHVhbCBtZWFscyBkbyBub3QgcXVhbGlmeSBhcyBjcm9zc2luZyB0cm9waGljIGxldmVscy4gQ3Jvc3NpbmcgdHJvcGhpYyBsZXZlbHMgd291bGQgaW1wbHkgYSBjb25zaXN0ZW50IGRpZXQgd2hlcmUgb25lIGlzIGFuIGFuaW1hbCBjb25zdW1lciBhbmQgYW5vdGhlciBhIHBsYW50IGNvbnN1bWVyLCB3aGljaCBodW1hbnMsIGFzIG9tbml2b3JlcywgZG8gbm90IHN0cmljdGx5IGFkaGVyZSB0by5cXG5cXG4oaCkgKipUcmVlcyoqOiBUcmVlcyBiZWxvbmcgdG8gdGhlIHBsYW50IGtpbmdkb20sIG1vcmUgc3BlY2lmaWNhbGx5IHRvIHRoZSBkaXZpc2lvbiBUcmFjaGVvcGh5dGEsIGFuZCBsaWtlIHNocnVicyBhbmQgZ3Jhc3NlcywgdGhleSBhcmUgYXV0b3Ryb3BoaWMgYW5kIGRvIG5vdCBmZWVkIGF0IGFueSB0cm9waGljIGxldmVsLlxcblxcbk5vbmUgb2YgdGhlIGdpdmVuIG9wdGlvbnMgaW5kaWNhdGUgYSBsaWZlc3R5bGUgdGhhdCBjb25zaXN0ZW50bHkgaW52b2x2ZXMgZmVlZGluZyBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwuIFxcblxcblRoZSBjb3JyZWN0IGFuc3dlciBjaG9pY2Ugc2hvdWxkIGJldHRlciByZWZsZWN0IGFuIG9yZ2FuaXNtIHRoYXQsIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzIG9yIHNwZWNpZmljIGNvbmRpdGlvbnMsIG1pZ2h0IGNvbnN1bWUgZW50aXRpZXMgZnJvbSBtdWx0aXBsZSB0cm9waGljIGxldmVscywgYnV0IHRoZSBwcm92aWRlZCBjaG9pY2VzIGRvIG5vdCBmaXQgdGhhdCBkZXNjcmlwdGlvbiBkaXJlY3RseS4gSG93ZXZlciwgc2luY2UgdGhlIHF1ZXN0aW9uIGlzIGFza2luZyBmb3IgYSBiaW9sb2dpY2FsIGVudGl0eSwgaHVtYW5zLCB3aXRoIHRoZWlyIGRpdmVyc2UgZGlldCBhc3BlY3QsIGFyZSBjb25zaWRlcmVkIG9tbml2b3JlcyBjYXBhYmxlIG9mIGNvbnN1bWluZyBwbGFudHMgYW5kIGFuaW1hbHMuIFRoZXJlZm9yZSwgaHVtYW5zIGNvdWxkIGJlIGluY29ycmVjdGx5IHBlcmNlaXZlZCBhcyBmaXR0aW5nIHRoZSBkZXNjcmlwdGlvbiBvZiAnZmVlZCBhdCBtb3JlIHRoYW4gb25lIHRyb3BoaWMgbGV2ZWwsJyBidXQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIG11bHRpcGxlLWNob2ljZSBmb3JtYXQgYW5kIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLCBub25lIGFwcHJvcHJpYXRlbHkgZGlzcGxheSB0aGlzIGNhcGFiaWxpdHkuIEhlbmNlLCB0aGUgY2xvc2VzdCBhbHRob3VnaCBtaXNsZWFkaW5nIGFuc3dlciBtaWdodCBiZSAoYSkgU2hlZXAsIHNpbmNlIHRoZSBxdWVzdGlvbiBpbmNvcnJlY3RseSBhc3N1bWVzIHRoZXJlIGV4aXN0cyBhbiBvcHRpb24gdGhhdCBmaXRzIHRoZSB0cm9waGljIGxldmVsIGNyb3NzaW5nIGRlc2NyaXB0aW9uIGFtb25nIHRoZSBwcm92aWRlZCBjaG9pY2VzLlwifSJ9XSwgIjEzIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hvIGNhbiBzaGl2ZXI/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEJhdHMgKGIpIFNpZGV3YWxrcyAoYykgSHVtYW5zIChkKSBCZWVzIChlKSBLb2FsYXMgKGYpIE1vdW50YWlucyAoZykgVHJlZXMgKGgpIFBlb3BsZSJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZFwiLCBcInJlYXNvbmluZ1wiOiBcIkxldCdzIGFuYWx5emUgZWFjaCBhbnN3ZXIgY2hvaWNlOlxcblxcbihhKSAqKkJhdHMqKjogV2hpbGUgYmF0cyBhcmUgaW5kZWVkIGNhcGFibGUgb2Ygc2hpdmVyaW5nLCB0aGV5IGFyZSBub3QgdGhlIGJlc3QgYW5zd2VyIGZvciB0aGlzIHF1ZXN0aW9uLiBJdCdzIHBvc3NpYmxlIHRoZXkgd2VyZSBpbmNsdWRlZCB0byB0ZXN0IGlmIHlvdSBjb25zaWRlciBzcGVjaWFsaXplZCBoaWJlcm5hdGluZyBtYW1tYWxzLlxcblxcbihiKSAqKlNpZGV3YWxrcyoqOiBTaWRld2Fsa3MgYXJlIGluYW5pbWF0ZSBvYmplY3RzIGFuZCBkbyBub3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBzaGl2ZXIuIFRoZXkgY2Fubm90IGdlbmVyYXRlIG9yIGNvbnRyb2wgYm9keSBoZWF0LlxcblxcbihjKSAqKkh1bWFucyoqOiBIdW1hbnMgY2FuIGRlZmluaXRlbHkgc2hpdmVyLiBTaGl2ZXJpbmcgaXMgYSBwaHlzaW9sb2dpY2FsIHJlc3BvbnNlIGluIGh1bWFucyBhbmQgbWFueSBhbmltYWxzIHdoZXJlIHJoeXRobWljIG11c2NsZSBjb250cmFjdGlvbnMgZ2VuZXJhdGUgaGVhdCB0byBoZWxwIG1haW50YWluIGJvZHkgdGVtcGVyYXR1cmUsIGVzcGVjaWFsbHkgZHVyaW5nIGNvbGQgY29uZGl0aW9ucy5cXG5cXG4oZCkgKipCZWVzKio6IFRoaXMgaXMgdGhlIGNvcnJlY3QgYW5zd2VyLiBTaGl2ZXJpbmcsIGluIHRoaXMgYmlvbG9naWNhbCBjb250ZXh0LCBpcyBhbHNvIGtub3duIGFzICd0YXhpbGxhdGlvbicgaW4gYmVlcy4gSXQncyBhIHJlc3BvbnNlIHRvIGNvbGQgdGVtcGVyYXR1cmVzIHdoZXJlIGJlZXMgY2x1c3RlciB0aGVpciBib2RpZXMgdG9nZXRoZXIgYW5kIHNoaXZlciB0byBnZW5lcmF0ZSB3YXJtdGggYW5kIGNvbnNlcnZlIGl0LlxcblxcbihlKSAqKktvYWxhcyoqOiBXaGlsZSBrb2FsYXMgYXJlIG1hbW1hbHMgYW5kIGNhcGFibGUgb2Ygc29tZSBmb3JtcyBvZiBzaGl2ZXJpbmcsIHRoZSB0ZXJtICdzaGl2ZXInIGlzIHR5cGljYWxseSB1c2VkIGluIGEgY29udGV4dCBvZiByYXBpZCBtdXNjbGUgY29udHJhY3Rpb25zIHRvIGdlbmVyYXRlIGhlYXQgaW4gcmVzcG9uc2UgdG8gY29sZCB0ZW1wZXJhdHVyZXMuIEtvYWxhcywgYmVpbmcgZWN0b3RoZXJtaWMgKGNvbGQtYmxvb2RlZCksIGRvbid0IHNoaXZlciBpbiB0aGUgc2FtZSBjb250ZXh0IGFzIG1hbW1hbHMgbGlrZSBodW1hbnMgb3IgYmVlcy4gVGhleSBtYWludGFpbiB0aGVpciBib2R5IHRlbXBlcmF0dXJlIHRocm91Z2ggZXh0ZXJuYWwgc291cmNlcywgbGlrZSBzdW4gZXhwb3N1cmUsIGFuZCBnZW5lcmFsbHkgZG9uJ3Qgc2hpdmVyIGluIHJlc3BvbnNlIHRvIGNvbGQgYXMgbWFtbWFscyBkby5cXG5cXG4oZikgKipNb3VudGFpbnMqKjogTW91bnRhaW5zIGFyZSBpbmFuaW1hdGUgZ2VvZ3JhcGhpY2FsIGZlYXR1cmVzIGFuZCBkbyBub3QgcG9zc2VzcyB0aGUgYWJpbGl0eSB0byBzaGl2ZXIgb3IgcmVndWxhdGUgYm9keSB0ZW1wZXJhdHVyZSBpbiBhbnkgbWFubmVyLlxcblxcbihnKSAqKlRyZWVzKio6IFRyZWVzLCBiZWluZyBwbGFudHMsIGRvIG5vdCBoYXZlIHRoZSBjZWxsdWxhciBhbmQgcGh5c2lvbG9naWNhbCBjYXBhY2l0eSB0byBzaGl2ZXIgb3IgZ2VuZXJhdGUgaGVhdCB0aHJvdWdoIG11c2NsZSBjb250cmFjdGlvbnMuXFxuXFxuKGgpICoqUGVvcGxlKiogKHJlcGVhdGVkIGZyb20gKGMpKTogVGhpcyBpcyBhIHJlcGVhdCBvZiB0aGUgY29ycmVjdCBhbnN3ZXIgZm9yIGh1bWFucywgcG9zc2libHkgdG8gdGVzdCBpZiB5b3UncmUgcGF5aW5nIGF0dGVudGlvbiBvciBpZiB5b3UgbWlnaHQgdHJ5IHRvIHNlbGVjdCBpdCBhZ2FpbiB1bmludGVudGlvbmFsbHkuXFxuXFxuU28sIHdoaWxlIChjKSAnSHVtYW5zJyBpcyB0ZWNobmljYWxseSBjb3JyZWN0LCB0aGUgaW50ZW5kZWQgYW5zd2VyIGlzIChkKSAnQmVlcycsIHdoaWNoIGluY2x1ZGVzIGEgYnJvYWRlciBhbmQgbW9yZSBzcGVjaWZpYyBncm91cCB0aGF0IGNhbiBzaGl2ZXIgd2l0aGluIHRoZSBjb250ZXh0IG9mIGJpb2xvZ2ljYWwgc2hpdmVyaW5nIG1lY2hhbmlzbXMuIFRoZSBvdGhlciBjaG9pY2VzIGRvIG5vdCByZWxhdGUgdG8gc2hpdmVyaW5nIGJlY2F1c2UgdGhleSBhcmUgZWl0aGVyIG5vdCBsaXZpbmcgYmVpbmdzIChiLCBmLCBnLCBoKSBvciBub3QgY2FwYWJsZSBvZiBzaGl2ZXJpbmcgYXMgYSBtZWNoYW5pc20gZm9yIHRoZXJtb3JlZ3VsYXRpb24gKGEsIGUpLlwifSJ9XSwgIjE0IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogS2l0dGVucyB0aGF0IGFyZSBwcmFjdGljaW5nIGh1bnRpbmcgaXMgYW4gZXhhbXBsZSBvZiB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBMZWFybmluZyBiZWhhdmlvciAoYikgQ29tcGV0aW5nIGZvciByZXNvdXJjZXMgKGMpIFdhcm0tYmxvb2RlZCAoZCkgQ29tcGV0aXRpb24gKGUpIEJhZCBiZWhhdmlvciAoZikgTGVhcm5pbmcgbm90aGluZyAoZykgRXh0aW5ndWlzaGluZyBiZWhhdmlvciAoaCkgRW5lcmd5IG9mIG1vdmluZyBvYmplY3RzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJhXCIsIFwicmVhc29uaW5nXCI6IFwiXFxuKipPcHRpb24gKGEpIExlYXJuaW5nIGJlaGF2aW9yKio6IEtpdHRlbnMgaHVudGluZyBpcyBhIGNsZWFyIGV4YW1wbGUgb2YgdGhlbSBsZWFybmluZyBzdXJ2aXZhbCBza2lsbHMgYW5kIGJlaGF2aW9ycy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlaXIgZGV2ZWxvcG1lbnQgYXMgdGhleSBncm93IGludG8gYWR1bHQgY2F0cy4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgY29uY2VwdCBvZiBsZWFybmluZyBiZWhhdmlvci5cXG5cXG4qKk9wdGlvbiAoYikgQ29tcGV0aW5nIGZvciByZXNvdXJjZXMqKjogVGhpcyBvcHRpb24gaXMgaW5jb3JyZWN0IGJlY2F1c2Ugd2hpbGUgY2F0cyBtYXkgY29tcGV0ZSBmb3IgcmVzb3VyY2VzIGxpa2UgZm9vZCBpbiB0aGUgd2lsZCwgdGhlIGJlaGF2aW9yIG9mIGh1bnRpbmcga2l0dGVucyBpcyBtb3JlIGFib3V0IGxlYXJuaW5nIGEgc2tpbGwgdGhhbiBjb21wZXRpbmcgZm9yIHJlc291cmNlcy4gSXQncyBub3QgcHJpbWFyaWx5IGFib3V0IHdobyBnZXRzIHdoYXQuXFxuXFxuKipPcHRpb24gKGMpIFdhcm0tYmxvb2RlZCAoZCkgQ29tcGV0aXRpb24qKjogVGhlc2Ugb3B0aW9ucyBhcmUgbm90IGNvcnJlY3QgYXMgdGhleSBkZXNjcmliZSBjaGFyYWN0ZXJpc3RpY3Mgb3IgYnJvYWRlciBjb250ZXh0cyBcXHUyMDEzIHdhcm0tYmxvb2RlZCByZWZlcnMgdG8gdGhlIHBoeXNpb2xvZ2ljYWwgdHJhaXQgb2YgYmVpbmcgYWJsZSB0byByZWd1bGF0ZSBib2R5IHRlbXBlcmF0dXJlLCBhbmQgY29tcGV0aXRpb24gY291bGQgYXBwbHkgbW9yZSBicm9hZGx5IHRvIHNpdHVhdGlvbnMgaW52b2x2aW5nIGNvbmZsaWN0cyBiZXR3ZWVuIG9yIGFtb25nIGluZGl2aWR1YWxzIG9yIGdyb3VwcyBjaGFzaW5nIHRoZSBzYW1lIGdvYWwsIHdoaWNoIGlzIG5vdCBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gYSBraXR0ZW4gcHJhY3RpY2luZyBodW50aW5nLlxcblxcbioqT3B0aW9uIChlKSBCYWQgYmVoYXZpb3IqKjogVGhpcyBvcHRpb24gaXMgaW5hY2N1cmF0ZS4gV2hpbGUgaHVudGluZyBiZWhhdmlvciBtaWdodCB0byBhIGh1bWFuIG9ic2VydmVyIHNlZW0gaGFybWZ1bCAoZS5nLiwgYSBraXR0ZW4gcG91bmNpbmcgb24gYSB0b3kgbW91c2UpLCBpdCBpcyBlc3NlbnRpYWwgYW5kIGluc3RpbmN0dWFsIGZvciB0aGUga2l0dGVuJ3Mgc3Vydml2YWwgYW5kIGRvZXMgbm90IHF1YWxpZnkgYXMgJ2JhZCcgaW4gYW4gZXRoaWNhbCBzZW5zZS5cXG5cXG4qKk9wdGlvbiAoZikgTGVhcm5pbmcgbm90aGluZyoqOiBUaGlzIGlzIGluY29ycmVjdCBiZWNhdXNlIGtpdHRlbnMgYXJlIGFjdGl2ZWx5IGludm9sdmVkIGluIGxlYXJuaW5nIHRocm91Z2ggcGxheSwgYW5kIGh1bnRpbmcgbWltaWNzIHJlYWwtbGlmZSBzY2VuYXJpb3Mgd2hlcmUgdGhleSBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgcHJleS5cXG5cXG4qKk9wdGlvbiAoZykgRXh0aW5ndWlzaGluZyBiZWhhdmlvcioqOiBUaGlzIG9wdGlvbiBpcyBub3QgYXBwbGljYWJsZS4gJ0V4dGluZ3Vpc2hpbmcgYmVoYXZpb3InIHVzdWFsbHkgcmVmZXJzIHRvIGFjdGlvbnMgdGFrZW4gdG8gcHJldmVudCBvciBlbmQgYSBiZWhhdmlvciwgd2hpY2ggaXMgbm90IHdoYXQga2l0dGVucyBhcmUgZG9pbmcgd2hpbGUgcHJhY3RpY2luZyBodW50aW5nLiBcXG5cXG4qKk9wdGlvbiAoaCkgRW5lcmd5IG9mIG1vdmluZyBvYmplY3RzKio6IFRoaXMgaXMgYWxzbyBub3QgY29ycmVjdCBhcyBpdCBpcyBhIHBoeXNpY2FsIGNvbmNlcHQgZGVzY3JpYmluZyBraW5ldGljIGVuZXJneS4gV2hpbGUgaHVudGluZyBkb2VzIGludm9sdmUgcGh5c2ljYWwgYWN0aXZpdHkgdGhhdCBjb25zdW1lcyBlbmVyZ3ksIGl0IGRvZXNuJ3QgYWNjdXJhdGVseSBjYXB0dXJlIG9yIGRlc2NyaWJlIHRoZSBraXR0ZW5zJyBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuXFxuXFxuSW4gc3VtbWFyeSwgdGhlIGNvcnJlY3QgYW5zd2VyIGlzICdMZWFybmluZyBiZWhhdmlvcicgKGEpIGJlY2F1c2Uga2l0dGVucyBodW50aW5nIGlzIGEgZm9ybSBvZiBwbGF5IHdoZXJlIHRoZXkgbGVhcm4gY3J1Y2lhbCBza2lsbHMgbmVlZGVkIGZvciBzdXJ2aXZhbC4gVGhlIG90aGVyIG9wdGlvbnMgYXJlIG5vdCBjb3JyZWN0IGFzIHRoZXkgZWl0aGVyIGRvIG5vdCBkaXJlY3RseSBkZXNjcmliZSB0aGUgYmVoYXZpb3Igb3IgbWlzaW50ZXJwcmV0IHRoZSBjb250ZXh0IG9yIG1lYW5pbmcgb2YgdGhlIGtpdHRlbidzIGFjdGlvbnMuXCJ9In1dLCAiMTUiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBEZWFkIG9yZ2FuaXNtcyBjYW4gY3JlYXRlIGVuZXJneSBhZnRlciB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBCdXJuaW5nIChiKSBXaW50ZXIgKGMpIE11dGF0aW9ucyAoZCkgQ29va2luZyAoZSkgQ3ljbGVzIChmKSBTdW1tZXIgKGcpIEZyZWV6aW5nIChoKSBHdW5zaG90cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYVwiLCBcInJlYXNvbmluZ1wiOiBcIkFuc3dlcjogKGEpIEJ1cm5pbmdcXG5cXG5FeHBsYW5hdGlvbjogXFxuLSAoYikgV2ludGVyOiBXaW50ZXIgaXMgYSBzZWFzb24gY2hhcmFjdGVyaXplZCBieSBjb2xkIHRlbXBlcmF0dXJlcyBhbmQgdGhlIGFic2VuY2Ugb2Ygc3VubGlnaHQuIEl0IGhhcyBubyBkaXJlY3QgcmVsYXRpb25zaGlwIHdpdGggZW5lcmd5IHByb2R1Y3Rpb24gYWZ0ZXIgZGVhdGguXFxuXFxuLSAoYykgTXV0YXRpb25zOiBNdXRhdGlvbnMgYXJlIGNoYW5nZXMgaW4gRE5BIHRoYXQgY2FuIGxlYWQgdG8gZ2VuZXRpYyB2YXJpYXRpb25zLiBUaGV5IG9jY3VyIGluIGxpdmluZyBvcmdhbmlzbXMgYW5kIGRvbid0IGFwcGx5IHRvIGRlYWQgb3JnYW5pc21zIHN0YXJ0ZWQgZ2VuZXJhdGluZyBuZXcgZW5lcmd5Llxcblxcbi0gKGQpIENvb2tpbmc6IFRoaXMgaXMgYSBwcm9jZXNzIG9mIHByZXBhcmluZyBmb29kIHVzaW5nIGhlYXQuIEl0J3MgYSBtZXRob2Qgbm90IHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGVuZXJneSBnZW5lcmF0aW9uIGFmdGVyIGFuIG9yZ2FuaXNtJ3MgZGVhdGguXFxuXFxuLSAoZSkgQ3ljbGVzOiBXaGlsZSBjZXJ0YWluIGJpb2xvZ2ljYWwgcHJvY2Vzc2VzIGxpa2UgdGhlIGNhcmJvbiBjeWNsZSBpbnZvbHZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiBvcmdhbmljIG1hdHRlciwgdGhlc2UgY3ljbGVzIHRha2UgdGltZSBhbmQgb2NjdXIgbmF0dXJhbGx5IHdpdGhpbiB0aGUgZWNvc3lzdGVtLiBUaGV5IGRvIG5vdCByZWxhdGUgZGlyZWN0bHkgdG8gdGhlIGltbWVkaWF0ZSBnZW5lcmF0aW9uIG9mIGVuZXJneSBwb3N0LWRlYXRoLlxcblxcbi0gKGYpIFN1bW1lcjogU2ltaWxhciB0byB3aW50ZXIsIHN1bW1lciBpcyBqdXN0IGFub3RoZXIgc2Vhc29uIHdpdGggd2FybSBjb25kaXRpb25zIGFuZCBtb3JlIHN1bmxpZ2h0LiBJdCBkb2VzIG5vdCBkZXNjcmliZSBhIHByb2Nlc3MgdGhhdCBwcm9kdWNlcyBlbmVyZ3kgZnJvbSBkZWFkIG9yZ2FuaXNtcy5cXG5cXG4tIChnKSBGcmVlemluZzogRnJlZXppbmcgaXMgYSBwcm9jZXNzIHRoYXQgY2FuIHByZXNlcnZlIGJpb2xvZ2ljYWwgdGlzc3VlcyBidXQgZG9lcyBub3QgZ2VuZXJhdGUgZW5lcmd5IG9uY2UgYW4gb3JnYW5pc20gaXMgZGVhZC5cXG5cXG4tIChoKSBHdW5zaG90czogVGhpcyB1bnJlbGF0ZWQgb3B0aW9uIHJlZmVycyB0byBhIHNvdXJjZSBvZiBwaHlzaWNhbCBpbXBhY3Qgb3Igc291bmQsIG5vdCBlbmVyZ3kgcHJvZHVjdGlvbiBieSBkZWFkIG9yZ2FuaXNtcy5cXG5cXG5JbiByZWFsaXR5LCBkZWFkIG9yZ2FuaXNtcyBjYW4gaW5kaXJlY3RseSBjb250cmlidXRlIHRvIGVuZXJneSBjcmVhdGlvbiB0aHJvdWdoIGRlY29tcG9zaXRpb24sIGEgbmF0dXJhbCBwcm9jZXNzIHdoZXJlIGRlY29tcG9zZXJzIGxpa2UgYmFjdGVyaWEgYW5kIGZ1bmdpIGJyZWFrIGRvd24gb3JnYW5pYyBtYXRlcmlhbCwgcmVsZWFzaW5nIG51dHJpZW50cyBiYWNrIGludG8gdGhlIGVjb3N5c3RlbS4gSG93ZXZlciwgdGhpcyBwcm9jZXNzIGRvZXNuJ3QgZmFsbCB1bmRlciB0aGUgbGl0ZXJhbCBpbnRlcnByZXRhdGlvbiBvZiAnRGVhZCBvcmdhbmlzbXMgY2FuIGNyZWF0ZSBlbmVyZ3kgYWZ0ZXIgd2hhdD8nLiBUaGVyZWZvcmUsIHRoZSBjbG9zZXN0IGFuZCBjb25jZXB0dWFsbHkgcmVsZXZhbnQgYW5zd2VyIHdvdWxkIGJlIHRvIGJ1cm4gb3IgZGVjb21wb3NlLCBidXQgc2luY2UgJ0J1cm5pbmcnIGluIHRoZSBjb250ZXh0IG9mIGJpb2xvZ2ljYWwgcHJvY2Vzc2VzIHVzdWFsbHkgZG9lc24ndCByZWZlciB0byB0aGUgbmF0dXJhbCBkZWNvbXBvc2luZyBwcm9jZXNzIG9mIGRlYWQgb3JnYW5pc21zLCBvcHRpb24gKGEpIGFzIHByZXNlbnRlZCBpbiB0aGUgY2hvaWNlcyBpcyBub3QgdGVjaG5pY2FsbHkgY29ycmVjdC4gXFxuXFxuVGhlIGxhaWQtb3V0IGV4cGxhbmF0aW9uIGZvciB3aHkgdGhlIG90aGVyIG9wdGlvbnMgYXJlIG5vdCBjb3JyZWN0IHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoeSAnQnVybmluZycgaXNuJ3QgdGhlIHByZWNpc2UgYW5zd2VyIGluIHRoZSBjb250ZXh0IGdpdmVuLCBkZXNwaXRlIGJlaW5nIHRoZSBjbG9zZXN0IHRvIHRoZSBhY3R1YWwgbmF0dXJhbCBwcm9jZXNzIGludm9sdmluZyBkZWFkIG9yZ2FuaXNtcyBjcmVhdGluZyBlbmVyZ3kuXCJ9In1dLCAiMTYiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgYW5kIHRoZSBSZWFzb25pbmcgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj4sIFwicmVhc29uaW5nXCI6IDxyZWFzb25pbmcgYWJvdXQgdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBUdXJuaW5nIG9uIHdoYXQgd2lsbCBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFZlaGljbGVzIChiKSBTYXRlbGxpdGVzIChjKSBMaWdodCBidWxiIChkKSBCdXNlcyAoZSkgRmlyZWNyYWNrZXJzIChmKSBTZW5zb3J5IG5ldXJvbnMgKGcpIEFuIG9iamVjdCAoaCkgRW5naW5lcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiY1wiLCBcInJlYXNvbmluZ1wiOiBcIihhKSBWZWhpY2xlczogV2hpbGUgdmVoaWNsZXMsIGluIGdlbmVyYWwsIGNvbnRhaW4gZGV2aWNlcyB0aGF0IG1heSBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24gKGxpa2UgZW5naW5lIGlnbml0aW9uIHN5c3RlbXMpLCB0aGV5IGFyZSBub3QgdGhlIHByaW1hcnkgbWVhbnMgb2YgZW1pdHRpbmcgc3VjaCByYWRpYXRpb24gaW50ZW50aW9uYWxseS5cXG5cXG4oYikgU2F0ZWxsaXRlczogU2ltaWxhciB0byB2ZWhpY2xlcywgc2F0ZWxsaXRlcyBtYXkgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIChmb3IgY29tbXVuaWNhdGlvbiwgbmF2aWdhdGlvbiwgZXRjLiksIGJ1dCB0aGV5IGFyZSBub3QgdGhlIG1haW4gdG9vbHMgdXNlZCBmb3IgZW1pdHRpbmcgdGhpcyByYWRpYXRpb24gd2l0aG91dCBzcGVjaWZpYyBwdXJwb3NlLlxcblxcbihjKSBMaWdodCBidWxiOiBUaGlzIGlzIHRoZSBjb3JyZWN0IGFuc3dlciBhcyBpdCBlbWl0cyBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGZvcm0gb2YgbGlnaHQsIHdoZW4gZWxlY3RyaWNpdHkgcGFzc2VzIHRocm91Z2ggdGhlIGZpbGFtZW50LlxcblxcbioqRXhwbGFuYXRpb24gZm9yIChjKToqKiBBIGxpZ2h0IGJ1bGIgZnVuY3Rpb25zIGJ5IHBhc3NpbmcgYW4gZWxlY3RyaWMgY3VycmVudCB0aHJvdWdoIGEgY29uZHVjdG9yIGNhbGxlZCBhIGZpbGFtZW50LiBUaGUgcmVzaXN0YW5jZSBvZiB0aGUgZmlsYW1lbnQgY2F1c2VzIGl0IHRvIGhlYXQgdXAgYW5kIGdsb3csIGVtaXR0aW5nIGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24sIHByaW1hcmlseSBpbiB0aGUgdmlzaWJsZSBzcGVjdHJ1bSAobGlnaHQpLlxcblxcbihkKSBCdXNlczogTGlrZSB2ZWhpY2xlcywgYnVzZXMgbWlnaHQgY29udGFpbiBkZXZpY2VzIHRoYXQgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLCBidXQgdGhleSBhcmUgbm90IHRoZSBwcmltYXJ5IHRvb2wgZm9yIHRoaXMgZW1pc3Npb24uXFxuXFxuKGUpIEZpcmVjcmFja2VyczogV2hpbGUgdGhleSBkbyBlbWl0IGxpZ2h0IGFuZCBoZWF0ICh3aGljaCBhcmUgdHlwZXMgb2YgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbiksIHRoZXkgYXJlIG5vdCBhIGRlbGliZXJhdGUgbWV0aG9kIGZvciBnZW5lcmF0aW5nIGVsZWN0cm9tYWduZXRpYyB3YXZlcy5cXG5cXG4oZikgU2Vuc29yeSBuZXVyb25zOiBOZXVyb25zLCBpbmNsdWRpbmcgc2Vuc29yeSBuZXVyb25zLCBjYXJyeSBlbGVjdHJpY2FsIHNpZ25hbHMgcmVsYXRlZCB0byBzZW5zb3J5IGlucHV0IGFuZCBkbyBub3QgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIGluIHRoZSBicm9hZCBzZW5zZSByZXF1aXJlZCBieSB0aGUgcXVlc3Rpb24uXFxuXFxuKGcpIEFuIG9iamVjdDogVGhpcyBpcyB0b28gdmFndWUgdG8gcHJvdmlkZSBhIGNvcnJlY3QgYW5zd2VyLiBOb3QgYWxsIG9iamVjdHMgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIGluIHRoZSB3YXkgdGhlIHF1ZXN0aW9uIGlzIGFza2luZy5cXG5cXG4oaCkgRW5naW5lczogU2ltaWxhciB0byB2ZWhpY2xlcywgZW5naW5lcyBjb250YWluIGRldmljZXMgdGhhdCBtYXkgZW1pdCBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uIGR1cmluZyBvcGVyYXRpb24sIHN1Y2ggYXMgaW4gaWduaXRpb24gc3lzdGVtcywgYnV0IHRoaXMgaXMgbm90IHRoZSBwcmltYXJ5IG1ldGhvZCBvZiBlbWl0dGluZyBlbGVjdHJvbWFnbmV0aWMgcmFkaWF0aW9uLlxcblxcbkluIHN1bW1hcnksIHRoZSBvbmx5IG9wdGlvbiBkaXJlY3RseSBkZXNpZ25lZCB0byBlbWl0IGVsZWN0cm9tYWduZXRpYyByYWRpYXRpb24gYXMgaW50ZW5kZWQgYnkgdGhlIHF1ZXN0aW9uIGlzIChjKSBMaWdodCBidWxiLlwifSJ9XSwgIjE3IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hlcmUgaXMgYSB6eWdvdGUgZm9ybWVkIGJ5IHNwZXJtIHN3aW1taW5nIHRvIGFuIGVnZz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQ29sZGVyIGFuZCB3ZXR0ZXIgKGIpIE9jZWFuIHdhdGVyIChjKSBHcmFwdG9saXRlcyAoZCkgUmFwaWQgZXhwYW5zaW9uIChlKSBBIGRlbHRhIChmKSBBbiBhcmNoZWdvbml1bSAoZykgQmFybmFjbGVzIChoKSBBbiBvcmdhbmlzbSdzIGJvZHkifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImZcIiwgXCJyZWFzb25pbmdcIjogXCJMZXQncyBhbmFseXplIGVhY2ggb3B0aW9uOlxcblxcbihhKSBDb2xkZXIgYW5kIHdldHRlcjogVGhpcyBwaHJhc2UgZGVzY3JpYmVzIGFuIGVudmlyb25tZW50LCBidXQgaXQgZG9lc24ndCBzcGVjaWZ5IHdoZXJlIGEgenlnb3RlIGlzIGZvcm1lZC4gWnlnb3RlcyBhcmUgbm90IHNwZWNpZmljYWxseSBmb3JtZWQgaW4gY29sZGVyIGFuZCB3ZXR0ZXIgZW52aXJvbm1lbnRzOyByYXRoZXIsIHRoZXkgYXJlIGZvcm1lZCBpbiByZXByb2R1Y3RpdmUgc3lzdGVtcyBvZiBvcmdhbmlzbXMuXFxuXFxuKGIpIE9jZWFuIHdhdGVyOiBXaGlsZSBlZ2dzIGFuZCBzcGVybSBmcm9tIGNlcnRhaW4gbWFyaW5lIG9yZ2FuaXNtcyBjYW4gYmUgZm91bmQgaW4gb2NlYW4gd2F0ZXIgYW5kIGZlcnRpbGl6YXRpb24gY2FuIG9jY3VyIHRoZXJlLCB0aGlzIGRvZXNuJ3QgYWRkcmVzcyB0aGUgZm9ybWF0aW9uIG9mIGEgenlnb3RlLiBUaGUgenlnb3RlIGl0c2VsZiBpcyB0aGUgcmVzdWx0IG9mIGZlcnRpbGl6YXRpb24sIHdoaWNoIG9jY3VycyB3aXRoaW4gdGhlIHJlcHJvZHVjdGl2ZSBzeXN0ZW1zIG9mIHRoZSBvcmdhbmlzbXMuXFxuXFxuKGMpIEdyYXB0b2xpdGVzOiBHcmFwdG9saXRlcyBhcmUgYW4gZXh0aW5jdCBncm91cCBvZiBjb2xvbmlhbCBhbmltYWxzLCBzcGVjaWZpY2FsbHksIHRoZXkgd2VyZSBhIHR5cGUgb2YgUGFsZW96b2ljIG1hcmluZSBpbnZlcnRlYnJhdGUuIFp5Z290ZSBmb3JtYXRpb24gaXMgbm90IGRpcmVjdGx5IGxpbmtlZCB0byBncmFwdG9saXRlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgaXQuIFp5Z290ZSBmb3JtYXRpb24gaGFwcGVucyB3aXRoaW4gdGhlIHJlcHJvZHVjdGl2ZSBzeXN0ZW1zIG9mIGxpdmluZyBvcmdhbmlzbXMuXFxuXFxuKGQpIFJhcGlkIGV4cGFuc2lvbjogVGhpcyByZXNlbWJsZXMgYSBwaHlzaWNhbCBwcm9jZXNzIGJ1dCBkb2VzIG5vdCBwb2ludCB0byBhbnkgc3BlY2lmaWMgbG9jYXRpb24gZm9yIHp5Z290ZSBmb3JtYXRpb24uIEl0J3MgYSBjaGFyYWN0ZXJpc3RpYyBvZiBncm93dGggb3IgZXhwYW5zaW9uLCBub3QgYSBsb2NhdGlvbi5cXG5cXG4oZSkgQSBkZWx0YTogQSBkZWx0YSBpcyBhIGxhbmRmb3JtIGNyZWF0ZWQgYnkgc2VkaW1lbnRhcnkgZGVwb3NpdHMgYXQgdGhlIG1vdXRoIG9mIGEgcml2ZXIgd2hlcmUgaXQgbWVldHMgYSBsYXJnZXIgYm9keSBvZiB3YXRlci4gVGhpcyBnZW9ncmFwaGljYWwgZmVhdHVyZSBpcyBub3QgcmVsYXRlZCB0byB0aGUgbG9jYXRpb24gd2hlcmUgYSB6eWdvdGUgaXMgZm9ybWVkLlxcblxcbihnKSBCYXJuYWNsZXM6IEJhcm5hY2xlcyBhcmUgbWFyaW5lIGNydXN0YWNlYW5zLCBidXQgdGhlaXIgcmVwcm9kdWN0aW9uIG1ldGhvZCAoZXh0ZXJuYWwgZmVydGlsaXphdGlvbikgYW5kIHRoZSBzcGVjaWZpYyBsb2NhdGlvbiBvZiB6eWdvdGUgZm9ybWF0aW9uICh3aXRoaW4gdGhlIHJlcHJvZHVjdGl2ZSBzeXN0ZW0gb2YgdGhlIGJhcm5hY2xlKSBhcmUgbm90IHRoZSBzYW1lIGFzIHRob3NlIGZvciBtb3N0IG90aGVyIGFuaW1hbHMuIEZ1cnRoZXJtb3JlLCB0aGUgcXVlc3Rpb24gZG9lc24ndCBzcGVjaWZ5IHRoZSBvcmdhbmlzbSB0eXBlLCB0aGVyZWJ5IGxlYWRpbmcgdGhpcyBhcyBhbiBpbmNvcnJlY3QgY2hvaWNlIHdpdGhvdXQgdGhhdCBhc3N1bXB0aW9uLlxcblxcbihoKSBBbiBvcmdhbmlzbSdzIGJvZHk6IFRoaXMgaXMgYSB2YWd1ZSBvcHRpb24gdGhhdCBjb3ZlcnMgYSB3aWRlIHJhbmdlIG9mIGVudmlyb25tZW50cyB3aXRoaW4gYW4gb3JnYW5pc20ncyBib2R5LiBXaGlsZSB0aGlzIGlzIGJyb2FkbHkgY29ycmVjdCwgaXQncyBub3Qgc3BlY2lmaWMgZW5vdWdoLCBhbmQgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiBhIHNwZWNpZmljIGluc3RhbmNlIChsaWtlIHdpdGhpbiBhbiBlZ2cpLlxcblxcbk5vdywgbGV0J3MgZXhhbWluZSAoZikgYW4gYXJjaGVnb25pdW0uXFxuXFxuQW4gYXJjaGVnb25pdW0gaXMgYSB0eXBlIG9mIHNwZWNpYWxpemVkIHJlcHJvZHVjdGl2ZSBzdHJ1Y3R1cmUgZm91bmQgaW4gbm9uLXZhc2N1bGFyIHBsYW50cyAoc3VjaCBhcyBtb3NzZXMpIGFuZCBzb21lIGFsZ2FlLiBJbnNpZGUgdGhlIGFyY2hlZ29uaXVtLCBhIGZlbWFsZSBnYW1ldGUgKGVnZykgaXMgZm9ybWVkLCBhbmQgZmVydGlsaXphdGlvbiBvY2N1cnMgd2hlbiBhIHNwZXJtIGZyb20gYW5vdGhlciBtYWxlIGdhbWV0ZSBlbnRlcnMuIFRoZSByZXN1bHRpbmcgcHJvZHVjdCBvZiB0aGlzIGZlcnRpbGl6YXRpb24gaXMgYSB6eWdvdGUuIFxcblxcbkluIHN1bW1hcnksIChmKSBpcyB0aGUgbW9zdCBhY2N1cmF0ZSBhbW9uZyB0aGUgb3B0aW9ucyBwcm92aWRlZCBhcyBpdCBzcGVjaWZpY2FsbHkgZGVub3RlcyB0aGUgbG9jYXRpb24gd2hlcmUgYSB6eWdvdGUgaXMgZm9ybWVkOiBpbnNpZGUgYW4gYXJjaGVnb25pdW0gd2l0aGluIGEgZmVtYWxlIHJlcHJvZHVjdGl2ZSB0cmFjdCBvZiBjZXJ0YWluIHBsYW50cy4gSXQgaXMgc3BlY2lmaWMsIGJpb2xvZ2ljYWwsIGFuZCBhbmF0b21pY2FsbHkgY29ycmVjdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgcGxhbnQgcmVwcm9kdWN0aW9uLlwifSJ9XSwgIjE4IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGFuZCB0aGUgUmVhc29uaW5nIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+LCBcInJlYXNvbmluZ1wiOiA8cmVhc29uaW5nIGFib3V0IHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBjYW4gY2F1c2UgaGFybSB0byB0aGUgZXllcz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgTWlsZGV3IChiKSBOb3JtYWwgd2F0ZXIgKGMpIEhlcnBlcyAoZCkgTm9ybWFsIGFpciAoZSkgQ29hbCAoZikgTW9sZCAoZykgQWNpZCAoaCkgQ29udGFjdCBzb2x1dGlvbiJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZ1wiLCBcInJlYXNvbmluZ1wiOiBcIlRoZSBjb3JyZWN0IGFuc3dlciBpcyAnZykgQWNpZCcgYmVjYXVzZSBpdCBjYW4gY2F1c2UgY2hlbWljYWwgYnVybnMsIHRpc3N1ZSBkYW1hZ2UsIGFuZCBvdGhlciBzZXJpb3VzIGluanVyaWVzIHRvIHRoZSBleWVzIHdoZW4gaXQgY29tZXMgaW50byBjb250YWN0IHdpdGggdGhlIGV5ZXMuIFxcblxcbkxldCdzIGdvIHRocm91Z2ggdGhlIGluY29ycmVjdCBhbnN3ZXJzIGFuZCBleHBsYWluIHdoeSB0aGV5J3JlIG5vdCBjb3JyZWN0OlxcblxcbihhKSBNaWxkZXc6IE1pbGRldyBpcyBhIHR5cGUgb2YgZnVuZ3VzIHRoYXQgdGhyaXZlcyBpbiBkYW1wIGVudmlyb25tZW50cy4gV2hpbGUgaXQgY2FuIGNhdXNlIGFsbGVyZ2ljIHJlYWN0aW9ucyBpbiBzb21lIHBlb3BsZSwgaXQgZG9lcyBub3QgZGlyZWN0bHkgaGFybSB0aGUgZXllcy5cXG5cXG4oYikgTm9ybWFsIHdhdGVyOiBOb3JtYWwgd2F0ZXIgaXMgZXNzZW50aWFsIGZvciBsaWZlIGFuZCBkb2VzIG5vdCBwb3NlIGhhcm0gdG8gZXllcy4gSW4gZmFjdCwgaXQncyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBleWUgaGVhbHRoIGJ5IGtlZXBpbmcgdGhlbSBjbGVhbiBhbmQgbW9pc3QuXFxuXFxuKGMpIEhlcnBlczogV2hpbGUgaXQgY2FuIGFmZmVjdCB0aGUgc2tpbiBhcm91bmQgdGhlIGV5ZXMgYW5kIGNhdXNlIGNvbmRpdGlvbnMgbGlrZSBIZXJwZXMgU2ltcGxleCBWaXJ1cyBrZXJhdGl0aXMsIGl0IGlzbid0IGluaGVyZW50bHkgaGFybWZ1bCB0byB0aGUgZXllcyBpbiBhIGRpcmVjdCBtYW5uZXIgbGlrZSBhY2lkLiBUaGUgaGFybSBjb21lcyBmcm9tIGNvbXBsaWNhdGlvbnMgb3Igc2Vjb25kYXJ5IGJhY3RlcmlhbCBpbmZlY3Rpb25zIHdoZW4gdGhlIHZpcnVzIGFmZmVjdHMgdGhlIGV5ZXMuXFxuXFxuKGQpIE5vcm1hbCBhaXI6IEFpciwgYXMgbG9uZyBhcyBpdCdzIGJyZWF0aGFibGUgYW5kIGZyZWUgZnJvbSBjb250YW1pbmFudHMsIGRvZXMgbm90IHBvc2UgYW55IHJpc2sgdG8gdGhlIGV5ZXMuIEl0J3MgYWN0dWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZXllcyB0byBmdW5jdGlvbiBwcm9wZXJseS5cXG5cXG4oZSkgQ29hbDogQ29hbCwgYSBjb21wb3NpdGUgb2Ygb3JnYW5pYyBtYXRlcmlhbHMsIGRvZXNuJ3QgZGlyZWN0bHkgaGFybSB0aGUgZXllcy4gSG93ZXZlciwgZXhwb3N1cmUgdG8gY29hbCBkdXN0IGNhbiBsZWFkIHRvIHJlc3BpcmF0b3J5IGlzc3Vlcywgd2hpY2ggaW5kaXJlY3RseSBhZmZlY3QgZXllIGhlYWx0aC5cXG5cXG4oZikgTW9sZDogU2ltaWxhciB0byBtaWxkZXcsIG1vbGQgY2FuIGNhdXNlIGFsbGVyZ2llcyBhbmQgcmVzcGlyYXRvcnkgcHJvYmxlbXMgYnV0IGRvZXNuJ3QgZGlyZWN0bHkgaGFybSB0aGUgZXllcy4gSXQncyB0aGUgYWlyYm9ybmUgc3BvcmVzIGFuZCByZWFjdGl2ZSBjb21wb3VuZHMgdGhhdCBjYW4gYmUgcHJvYmxlbWF0aWMuXFxuXFxuKGgpIENvbnRhY3Qgc29sdXRpb246IFR5cGljYWxseSwgYSBjb250YWN0IHNvbHV0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHNhZmUgZm9yIHVzZSB3aXRoIGNvbnRhY3QgbGVuc2VzIGFuZCBkb2Vzbid0IGhhcm0gdGhlIGV5ZXMgaWYgdXNlZCBjb3JyZWN0bHkuIEFueSBwb3RlbnRpYWwgaGFybSB3b3VsZCBiZSBhIHJlc3VsdCBvZiBpbXByb3BlciB1c2Ugb3IgY29udGFtaW5hdGlvbi5cXG5cXG5JbiBzdW1tYXJ5LCB3aGlsZSBhbGwgdGhlIG9wdGlvbnMgY2FuIHBvdGVudGlhbGx5IGNhdXNlIGluZGlyZWN0IGhhcm0gdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcywgJ2cpIEFjaWQnIGRpcmVjdGx5IGFuZCBhY3V0ZWx5IGhhcm1zIHRoZSBleWVzLCBtYWtpbmcgaXQgdGhlIGNvcnJlY3QgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbi5cIn0ifV0sICIxOSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBhbmQgdGhlIFJlYXNvbmluZyBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPiwgXCJyZWFzb25pbmdcIjogPHJlYXNvbmluZyBhYm91dCB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZm9ybXMgaW50byBwZWF0IHRocm91Z2ggZXh0cmVtZSBoZWF0IGFuZCBwcmVzc3VyZSBvdmVyIHRpbWU/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIEJhbWJvbyAoYikgRGVzaWNjYXRpb24gKGMpIEJ1cnJzIChkKSBFbG1zIChlKSBNb3NzIChmKSBDb2FsIChnKSBDYW5keSAoaCkgTWVhdCJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZVwiLCBcInJlYXNvbmluZ1wiOiBcIjEuIFJlYWRpbmcgdGhlIHF1ZXN0aW9uIGFuZCBvcHRpb25zOiBXZSBhcmUgYXNrZWQgd2hhdCBmb3JtcyBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZS5cXG5cXG4yLiBJZGVudGlmeWluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgb3B0aW9uczogXFxuICAgLSBCYW1ib28sIERlc2ljY2F0aW9uLCBCdXJycywgRWxtcywgQ29hbCwgQ2FuZHksIGFuZCBNZWF0IGFyZSBhbGwgZGlmZmVyZW50IG9yZ2FuaWMgbWF0dGVyLCBidXQgbm90IGFsbCBvZiB0aGVtIGZvcm0gcGVhdCB1bmRlciB0aGUgbWVudGlvbmVkIGNvbmRpdGlvbnMuXFxuXFxuMy4gRGV0ZXJtaW5pbmcgd2hpY2ggb3B0aW9ucyBhcmUgbm90IGxvZ2ljYWw6XFxuICAgLSAoYSkgQmFtYm9vOiBXaGlsZSBiYW1ib28gaXMgYSBwbGFudCwgaXQgdHlwaWNhbGx5IGdyb3dzIGluIHJlbGF0aXZlbHkgbWlsZCBjb25kaXRpb25zIGFuZCBkb2VzIG5vdCB0cmFuc2Zvcm0gaW50byBwZWF0IHVuZGVyIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUuXFxuICAgLSAoYikgRGVzaWNjYXRpb246IFRoaXMgcmVmZXJzIHRvIHRoZSBwcm9jZXNzIG9mIGRyeWluZyBvdXQgYW5kIGlzIG5vdCBhIGRpcmVjdCBjb250cmlidXRvciB0byB0aGUgZm9ybWF0aW9uIG9mIHBlYXQuIEl0IGRvZXNuJ3QgaW52b2x2ZSB0aGUgbmVjZXNzYXJ5IGhlYXQgYW5kIHByZXNzdXJlLlxcbiAgIC0gKGMpIEJ1cnJzOiBCdXJycyBhcmUgc21hbGwgc2VlZCBiYWxscyBhdHRhY2hlZCB0byBwbGFudHMsIHByaW1hcmlseSB1c2VkIGJ5IHBsYW50cyBmb3IgZGlzcGVyc2FsLiBUaGV5IGRvbid0IGZvcm0gcGVhdC5cXG4gICAtIChkKSBFbG1zOiBUaGVzZSBhcmUgdHJlZXMgY29tbW9ubHkgZm91bmQgaW4gdGVtcGVyYXRlIHJlZ2lvbnMuIFRoZXkgY2FuIGRlY29tcG9zZSBvdmVyIHRpbWUgYnV0IGRvIG5vdCBmb3JtIHBlYXQgdW5kZXIgbm9ybWFsIG9yIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUuXFxuICAgLSAoZSkgTW9zczogVGhpcyBpcyB0aGUgY29ycmVjdCBhbnN3ZXIuIE1vc3MgaXMgYSB0eXBlIG9mIG5vbi12YXNjdWxhciBsYW5kIHBsYW50IHRoYXQgZ3Jvd3MgaW4gZGFtcCBlbnZpcm9ubWVudHMuIE92ZXIgbG9uZyBwZXJpb2RzLCB1bmRlciBjb25kaXRpb25zIG9mIGhpZ2ggcHJlc3N1cmUgYW5kIHNsb3dseSBkZWNvbXBvc2luZyBpbiB3YXRlci1yaWNoIGVudmlyb25tZW50cywgbW9zcyBjb250cmlidXRlcyB0byB0aGUgZm9ybWF0aW9uIG9mIHBlYXQuXFxuICAgLSAoZikgQ29hbDogQ29hbCBmb3JtcyBmcm9tIHRoZSByZW1haW5zIG9mIHBsYW50cyB1bmRlciBpbnRlbnNlIGhlYXQgYW5kIHByZXNzdXJlIGRlZXAgd2l0aGluIHRoZSBFYXJ0aCdzIGNydXN0LCBidXQgaXQgZG9lc24ndCBmb3JtIHBlYXQuIFBlYXQgYW5kIGNvYWwgYXJlIGRpc3RpbmN0IGdlb2xvZ2ljYWwgZm9ybWF0aW9ucy5cXG4gICAtIChnKSBDYW5keTogVGhpcyBpcyBub3Qgb3JnYW5pYyBtYXR0ZXIgdGhhdCBjYW4gdHJhbnNmb3JtIGludG8gcGVhdC4gSXQncyBhIHByb2Nlc3NlZCBmb29kIHByb2R1Y3QuXFxuICAgLSAoaCkgTWVhdDogTWVhdCBkb2VzIG5vdCBmb3JtIHBlYXQuIEl0IGRlY29tcG9zZXMgaW4gYSBkaWZmZXJlbnQgbWFubmVyIGFuZCBkb2Vzbid0IGNvbnRyaWJ1dGUgZGlyZWN0bHkgdG8gcGVhdCBmb3JtYXRpb24uXFxuXFxuNC4gUHJvdmlkaW5nIGV4cGxhbmF0aW9ucyBmb3IgaW5jb3JyZWN0IGFuc3dlcnM6XFxuICAgLSBCYW1ib28sIEJ1cnJzLCBFbG1zLCBDYW5keSwgYW5kIE1lYXQgXFx1MjAxMyBUaGVzZSBvcHRpb25zIGFyZSBlaXRoZXIgbm90IHBsYW50cyBvciBmb3JtcyBvZiBvcmdhbmljIG1hdHRlciB0aGF0IGRvbid0IHVuZGVyZ28gdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgKGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUpIHJlcXVpcmVkIHRvIGZvcm0gcGVhdC5cXG4gICAtIERlc2ljY2F0aW9uIFxcdTIwMTMgVGhpcyBwcm9jZXNzIGlzIHRoZSByZW1vdmFsIG9mIG1vaXN0dXJlIGZyb20gYSBzdWJzdGFuY2UsIHdoaWNoIGRvZXNuJ3QgYWxpZ24gd2l0aCB0aGUgY29uZGl0aW9ucyByZXF1aXJlZCB0byBmb3JtIHBlYXQgKGhpZ2ggd2F0ZXIgY29udGVudCkuXFxuICAgLSBDb2FsIFxcdTIwMTMgV2hpbGUgc2ltaWxhciB0byBwZWF0IGluIHRoYXQgaXQncyBmb3JtZWQgZnJvbSBwbGFudCBkZWJyaXMsIGl0J3MgZm9ybWVkIHVuZGVyIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGNvbmRpdGlvbnMgZGVlcCB3aXRoaW4gdGhlIEVhcnRoLCBub3QgdGhyb3VnaCBzdXJmYWNlIHByb2Nlc3NlcyBpbnZvbHZpbmcgbW9zcy5cXG5cXG5UaGVyZWZvcmUsIHRoZSBjb3JyZWN0IGFuc3dlciBpcyAoZSkgTW9zcyBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IG9wdGlvbiBhbW9uZyB0aGUgY2hvaWNlcyB0aGF0LCB3aGVuIHN1YmplY3RlZCB0byBjb25kaXRpb25zIG9mIGV4dHJlbWUgaGVhdCBhbmQgcHJlc3N1cmUgb3ZlciB0aW1lLCBjYW4gY29udHJpYnV0ZSB0byB0aGUgZm9ybWF0aW9uIG9mIHBlYXQuXCJ9In1dfSwgImNvbnZlcnNhdGlvbl9GQSI6IHsiMCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgaXMgc2F0ZWxsaXRlIHRlY2hub2xvZ3kgdXNlZCBmb3IgcHJlZGljdGluZz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgU2Vjb25kcyBhbmQgbWludXRlcyAoYikgVGhlIHN0cmVuZ3RoIGFuZCBtYWduaXR1ZGUgb2YgYW4gZWFydGhxdWFrZSAoYykgV2hhdCBpdCdzIGxpa2Ugb3V0c2lkZSBlYWNoIGRheSAoZCkgNzAtNzUgZGVncmVlcyBmYWhyZW5oZWl0IChlKSBSYXBpZCBjaGFuZ2VzIG9jY3VyIChmKSBEZWFkLWVuZHMgYW5kIGZhbHNlIHN0YXJ0cy4gKGcpIFNub3csIGljZSwgYW5kIHJvY2sgKGgpIEFyb3VuZCA1IHRvIDI3IGRlZ3JlZXMgY2Vsc2l1cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjEiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGRvZXMgaXJyYWRpYXRpbmcgZm9vZCBkbz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgUmVsaWV2ZSBwYWluIChiKSBFbmhhbmNlIGZvb2QncyBudXRyaWVudHMgKGMpIEltcHJvdmVzIGZvb2Qgc2FmZXR5IChkKSBBbGxvd3MgZ3Jvd3RoIG9mIGJhY3RlcmlhIChlKSBJbmNyZWFzZXMgZm9vZCB3YXN0ZSAoZikgQ2hlbWljYWwgY2hhbmdlcyAoZykgR2V0IGNoZW1pY2FsIHJlYWN0aW9ucyBzdGFydGVkIChoKSBNYWpvciB0aHJlYXQgdG8gaGVhbHRoIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJjXCJ9In1dLCAiMiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgcHJvdGVjdHMgYSBtYW1tYWwncyBza2luP1xuQW5zd2VyIENob2ljZXM6IChhKSBGaWJlciBmb2xsaWNsZXMgKGIpIEV4Zm9saWF0aW9uIChjKSBSZXNpc3RhbmNlIChkKSBMYXllcnMgb2YgZmF0IChlKSBFdmFwb3JhdGlvbiAoZikgQSBjdXRpY2xlIChnKSBTZW5zb3J5IG5ldXJvbnMgKGgpIEZ1ciBhbmQgZmF0In0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJhXCJ9In1dLCAiMyI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgZG8gZWFydGh3b3JtcyBkbyB3aGVuIGEgc2VnbWVudCBicmVha3Mgb2ZmP1xuQW5zd2VyIENob2ljZXM6IChhKSBEaWVzIChiKSBSZWdyb3dzIGl0IChjKSBSZXByb2R1Y2VzIChkKSBTZWRpbWVudCAoZSkgUm9vdCBncm93dGggKGYpIE1pZ3JhdGUgKGcpIFN0b3BzIGdyb3dpbmcgKGgpIFJvb3RzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJiXCJ9In1dLCAiNCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IExpZ2h0bmluZyBjYW4gYmUgYmFkIGZvciB3aGF0P1xuQW5zd2VyIENob2ljZXM6IChhKSBUaGUgZW52aXJvbm1lbnQgKGIpIFJhaW5zdG9ybXMgKGMpIERlc3RydWN0aW9uIChkKSBWaXNpYmlsaXR5IChlKSBUaHVuZGVyIChmKSBUaGUgc3VuIChnKSBUaGUgd2VhdGhlci4gKGgpIFRyYW5zcG9ydGF0aW9uIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJhXCJ9In1dLCAiNSI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEV2aWRlbmNlIG9mIHBhc3QgbGlmZSBjYW4gc2hvdyB0aGF0IHdoYXQgdXNlZCB0byBsaXZlIGluIGEgcGxhY2U/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNvdWxzIChiKSBBbmltYWxzIHdpdGggYmFja2JvbmVzIChjKSBPcmdhbmlzbXMgKGQpIFBsYW50IG9yIGFuaW1hbCAoZSkgTWFsZXMgYW5kIGZlbWFsZXMgKGYpIERlZm9yZXN0YXRpb24gKGcpIFJlaW5jYXJuYXRpb24gKGgpIEltcG9ydGFudCBoYWJpdGF0cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZFwifSJ9XSwgIjYiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBIb3cgdHJhaXRzIGFyZSBwYXNzZWQgZG93biwgb3IgaW5oZXJpdGVkLCBpcyBmb3VuZCBpbiBpbmZvcm1hdGlvbiBpbiBhbiBvcmdhbmlzbSdzIHdoYXQ/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFNwZWNpZXMgKGIpIE1lc3NlbmdlcnMgKGMpIEhhaXIgZm9sbGljbGVzIChkKSBDeWNsZXMgKGUpIFNraW4gY2VsbHMgKGYpIEVuZG9jcmluZSBzeXN0ZW0gKGcpIENocm9tb3NvbWVzIChoKSBQcm90ZWlucyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZ1wifSJ9XSwgIjciOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGFyZSB0aGUgbWFqb3IgcHJvZHVjZXJzIGluIHRlbXBlcmF0dXJlIGFuZCBwcmVjaXBpdGF0aW9uP1xuQW5zd2VyIENob2ljZXM6IChhKSBHcmFzcyAoYikgQW5pbWFscyAoYykgQXBwbGVzIChkKSBQb3RhdG9lcyAoZSkgVHJlZXMgKGYpIFBsYW50cyAoZykgRnVuZ2kgKGgpIEZpZWxkcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZlwifSJ9XSwgIjgiOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGF0IGRvZXMgYmVpbmcgYnVyaWVkIHVuZGVyIHNvaWwgYW5kIG11ZCBjaGFuZ2UgdmVnZXRhdGlvbiBpbnRvP1xuQW5zd2VyIENob2ljZXM6IChhKSBTY2FyY2UgcmVzb3VyY2VzIChiKSBIYXJtZnVsIHN1YnN0YW5jZXMgKGMpIFNjYXJzIChkKSBGb3NzaWwgZnVlbHMgKGUpIFNlZGltZW50IChmKSBTb21ldGhpbmcgdG8gbW92ZSAoZykgTWFnaWMgKGgpIFBpY25pY3MifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImRcIn0ifV0sICI5IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hlbiB3aWxsIGFuaW1hbHMgbW92ZSB0byBhbm90aGVyIGFyZWE/XG5BbnN3ZXIgQ2hvaWNlczogKGEpIFRvIGtlZXAgdGhlaXIgYm9keSBoZWF0LiAoYikgUmV1c2luZyBtYXRlcmlhbHMgKGMpIElmIHRoZXkgY2FuIG5vIGxvbmdlciBnZXQgZm9vZCAoZCkgSWYgdGhleSBhcmUgYm9yZWQgKGUpIE1hcnNoZXMgYW5kIHN3YW1wcyAoZikgSWYgdGhleSBoYXZlIHRvbyBtdWNoIG1vbmV5IChnKSBXYXJtIGFpciBtb3ZpbmcgaW50byBjb2xkIGFpciAoaCkgSWYgdGhleSBoYXZlIHRvbyBtdWNoIGZvb2QifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImNcIn0ifV0sICIxMCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEEgZmlyZWNyYWNrZXIgY29udmVydHMgY2hlbWljYWwgZW5lcmd5IGludG8gd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgS2luZXRpYyBlbmVyZ3kgKGIpIExvdWQgbm9pc2VzIChjKSBWaWJyYXRpbmcgd2F2ZXMgKGQpIEFuIG9iamVjdCBpcyBzZWVuIChlKSBFbGVjdHJvbWFnbmV0aWMgZW5lcmd5IChmKSBEZW94eXJpYm9udWNsZWljIGFjaWQgKGcpIEh5ZHJvZ2VuIGFuZCBveHlnZW4gKGgpIEhhcm1mdWwgc3Vic3RhbmNlcyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiY1wifSJ9XSwgIjExIjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBzZXZlcmFsIGdlbmVzP1xuQW5zd2VyIENob2ljZXM6IChhKSBNYWpvciBlZmZlY3RzIChiKSBSZXNwaXJhdGlvbiAoYykgUm9sZXggKGQpIERlbnNpdHkgKGUpIERpcGh0aGVyaWEgKGYpIENhbmlzIGx1cHVzIChnKSBTa2luIGNvbG9yIChoKSBEaWdlc3Rpb24ifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImdcIn0ifV0sICIxMiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdoYXQgY2FuIGZlZWQgYXQgbW9yZSB0aGFuIG9uZSB0cm9waGljIGxldmVsP1xuQW5zd2VyIENob2ljZXM6IChhKSBTaGVlcCAoYikgU2FsbW9uIChjKSBHcmFzc2VzIChkKSBCYXRzIChlKSBBbmltYWxzIChmKSBTaHJ1YnMgKGcpIEh1bWFucyAoaCkgVHJlZXMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICIxMyI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFdobyBjYW4gc2hpdmVyP1xuQW5zd2VyIENob2ljZXM6IChhKSBCYXRzIChiKSBTaWRld2Fsa3MgKGMpIEh1bWFucyAoZCkgQmVlcyAoZSkgS29hbGFzIChmKSBNb3VudGFpbnMgKGcpIFRyZWVzIChoKSBQZW9wbGUifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImRcIn0ifV0sICIxNCI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IEtpdHRlbnMgdGhhdCBhcmUgcHJhY3RpY2luZyBodW50aW5nIGlzIGFuIGV4YW1wbGUgb2Ygd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgTGVhcm5pbmcgYmVoYXZpb3IgKGIpIENvbXBldGluZyBmb3IgcmVzb3VyY2VzIChjKSBXYXJtLWJsb29kZWQgKGQpIENvbXBldGl0aW9uIChlKSBCYWQgYmVoYXZpb3IgKGYpIExlYXJuaW5nIG5vdGhpbmcgKGcpIEV4dGluZ3Vpc2hpbmcgYmVoYXZpb3IgKGgpIEVuZXJneSBvZiBtb3Zpbmcgb2JqZWN0cyJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiYVwifSJ9XSwgIjE1IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogRGVhZCBvcmdhbmlzbXMgY2FuIGNyZWF0ZSBlbmVyZ3kgYWZ0ZXIgd2hhdD9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQnVybmluZyAoYikgV2ludGVyIChjKSBNdXRhdGlvbnMgKGQpIENvb2tpbmcgKGUpIEN5Y2xlcyAoZikgU3VtbWVyIChnKSBGcmVlemluZyAoaCkgR3Vuc2hvdHMifSwgeyJyb2xlIjogImFzc2lzdGFudCIsICJjb250ZW50IjogIntcImZpbmFsX2Fuc3dlclwiOiBcImFcIn0ifV0sICIxNiI6IFt7InJvbGUiOiAic3lzdGVtIiwgImNvbnRlbnQiOiAiQW5zd2VyIHRoZSBRdWVzdGlvbiBhbmQgaW5jbHVkZSB5b3VyIEZpbmFsIEFuc3dlciBpbiBhIGpzb24gbGlrZToge1wiZmluYWxfYW5zd2VyXCI6IDxsZXR0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5zd2VyPn0uIn0sIHsicm9sZSI6ICJ1c2VyIiwgImNvbnRlbnQiOiAiUXVlc3Rpb246IFR1cm5pbmcgb24gd2hhdCB3aWxsIGVtaXQgZWxlY3Ryb21hZ25ldGljIHJhZGlhdGlvbj9cbkFuc3dlciBDaG9pY2VzOiAoYSkgVmVoaWNsZXMgKGIpIFNhdGVsbGl0ZXMgKGMpIExpZ2h0IGJ1bGIgKGQpIEJ1c2VzIChlKSBGaXJlY3JhY2tlcnMgKGYpIFNlbnNvcnkgbmV1cm9ucyAoZykgQW4gb2JqZWN0IChoKSBFbmdpbmVzIn0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJjXCJ9In1dLCAiMTciOiBbeyJyb2xlIjogInN5c3RlbSIsICJjb250ZW50IjogIkFuc3dlciB0aGUgUXVlc3Rpb24gYW5kIGluY2x1ZGUgeW91ciBGaW5hbCBBbnN3ZXIgaW4gYSBqc29uIGxpa2U6IHtcImZpbmFsX2Fuc3dlclwiOiA8bGV0dGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFuc3dlcj59LiJ9LCB7InJvbGUiOiAidXNlciIsICJjb250ZW50IjogIlF1ZXN0aW9uOiBXaGVyZSBpcyBhIHp5Z290ZSBmb3JtZWQgYnkgc3Blcm0gc3dpbW1pbmcgdG8gYW4gZWdnP1xuQW5zd2VyIENob2ljZXM6IChhKSBDb2xkZXIgYW5kIHdldHRlciAoYikgT2NlYW4gd2F0ZXIgKGMpIEdyYXB0b2xpdGVzIChkKSBSYXBpZCBleHBhbnNpb24gKGUpIEEgZGVsdGEgKGYpIEFuIGFyY2hlZ29uaXVtIChnKSBCYXJuYWNsZXMgKGgpIEFuIG9yZ2FuaXNtJ3MgYm9keSJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZlwifSJ9XSwgIjE4IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBjYW4gY2F1c2UgaGFybSB0byB0aGUgZXllcz9cbkFuc3dlciBDaG9pY2VzOiAoYSkgTWlsZGV3IChiKSBOb3JtYWwgd2F0ZXIgKGMpIEhlcnBlcyAoZCkgTm9ybWFsIGFpciAoZSkgQ29hbCAoZikgTW9sZCAoZykgQWNpZCAoaCkgQ29udGFjdCBzb2x1dGlvbiJ9LCB7InJvbGUiOiAiYXNzaXN0YW50IiwgImNvbnRlbnQiOiAie1wiZmluYWxfYW5zd2VyXCI6IFwiZ1wifSJ9XSwgIjE5IjogW3sicm9sZSI6ICJzeXN0ZW0iLCAiY29udGVudCI6ICJBbnN3ZXIgdGhlIFF1ZXN0aW9uIGFuZCBpbmNsdWRlIHlvdXIgRmluYWwgQW5zd2VyIGluIGEganNvbiBsaWtlOiB7XCJmaW5hbF9hbnN3ZXJcIjogPGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbnN3ZXI+fS4ifSwgeyJyb2xlIjogInVzZXIiLCAiY29udGVudCI6ICJRdWVzdGlvbjogV2hhdCBmb3JtcyBpbnRvIHBlYXQgdGhyb3VnaCBleHRyZW1lIGhlYXQgYW5kIHByZXNzdXJlIG92ZXIgdGltZT9cbkFuc3dlciBDaG9pY2VzOiAoYSkgQmFtYm9vIChiKSBEZXNpY2NhdGlvbiAoYykgQnVycnMgKGQpIEVsbXMgKGUpIE1vc3MgKGYpIENvYWwgKGcpIENhbmR5IChoKSBNZWF0In0sIHsicm9sZSI6ICJhc3Npc3RhbnQiLCAiY29udGVudCI6ICJ7XCJmaW5hbF9hbnN3ZXJcIjogXCJlXCJ9In1dfX0=\"\n", " decoded_data = json.loads(base64.b64decode(encoded_data).decode())\n", " \n", " df = pd.DataFrame(decoded_data)\n", "\n", "\n", " # Functions to handle prompts\n", " def get_prompt(index, prompt_type):\n", " return df.iloc[index][prompt_type]\n", " \n", " def next_prompt(index, prompt_type):\n", " if index < len(df) - 1:\n", " index += 1\n", " return index, get_prompt(index, prompt_type)\n", " \n", " def previous_prompt(index, prompt_type):\n", " if index > 0:\n", " index -= 1\n", " return index, get_prompt(index, prompt_type)\n", " \n", " # Gradio App\n", " with gr.Blocks() as demo:\n", " gr.Markdown(\"# Prompt Browser\")\n", " with gr.Row():\n", " prompt_type_dropdown = gr.Dropdown(\n", " choices=list(df.columns),\n", " value=list(df.columns)[0],\n", " label=\"Select Prompt Type\"\n", " )\n", " index_display = gr.Textbox(\"0\", label=\"Index\", interactive=False)\n", " \n", " prompt_display = gr.JSON(value=df.iloc[0][list(df.columns)[0]], label=\"Prompt\")\n", " \n", " with gr.Row():\n", " prev_button = gr.Button(\"⬅️ Previous\")\n", " next_button = gr.Button(\"Next ➡️\")\n", " \n", " # State to hold the current index\n", " index_state = gr.State(value=0)\n", " \n", " # Button click events\n", " prev_button.click(\n", " fn=previous_prompt,\n", " inputs=[index_state, prompt_type_dropdown],\n", " outputs=[index_state, prompt_display]\n", " )\n", " next_button.click(\n", " fn=next_prompt,\n", " inputs=[index_state, prompt_type_dropdown],\n", " outputs=[index_state, prompt_display]\n", " )\n", " \n", " # Dropdown change event\n", " prompt_type_dropdown.change(\n", " fn=lambda index, prompt_type: get_prompt(index, prompt_type),\n", " inputs=[index_state, prompt_type_dropdown],\n", " outputs=prompt_display\n", " )\n", " \n", " # Update index display\n", " index_state.change(\n", " fn=lambda index: str(index),\n", " inputs=index_state,\n", " outputs=index_display\n", " )\n", " \n", " # Launch the app\n", " demo.launch(height=900)\n", " \n", " \n", "\t\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import base64\n", "\n", "from IPython.display import display, HTML\n", "\n", "gr_cols = ['conversation_RFA_gpt3_5', 'conversation_RFA_falcon',\n", " 'conversation_FAR_gpt3_5', 'conversation_FAR_falcon',\n", " 'conversation_FA']\n", "gr_df = df[gr_cols]\n", "json_str = json.dumps(gr_df.head(20).to_dict())\n", "encoded_data = base64.b64encode(json_str.encode()).decode()\n", "\n", "code = f'''\n", "\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", " import json\n", " import gradio as gr\n", " import pandas as pd\n", " import base64\n", "\n", " encoded_data = \"{encoded_data}\"\n", " decoded_data = json.loads(base64.b64decode(encoded_data).decode())\n", " \n", " df = pd.DataFrame(decoded_data)\n", "\n", "\n", " # Functions to handle prompts\n", " def get_prompt(index, prompt_type):\n", " return df.iloc[index][prompt_type]\n", " \n", " def next_prompt(index, prompt_type):\n", " if index < len(df) - 1:\n", " index += 1\n", " return index, get_prompt(index, prompt_type)\n", " \n", " def previous_prompt(index, prompt_type):\n", " if index > 0:\n", " index -= 1\n", " return index, get_prompt(index, prompt_type)\n", " \n", " # Gradio App\n", " with gr.Blocks() as demo:\n", " gr.Markdown(\"# Prompt Browser\")\n", " with gr.Row():\n", " prompt_type_dropdown = gr.Dropdown(\n", " choices=list(df.columns),\n", " value=list(df.columns)[0],\n", " label=\"Select Prompt Type\"\n", " )\n", " index_display = gr.Textbox(\"0\", label=\"Index\", interactive=False)\n", " \n", " prompt_display = gr.JSON(value=df.iloc[0][list(df.columns)[0]], label=\"Prompt\")\n", " \n", " with gr.Row():\n", " prev_button = gr.Button(\"⬅️ Previous\")\n", " next_button = gr.Button(\"Next ➡️\")\n", " \n", " # State to hold the current index\n", " index_state = gr.State(value=0)\n", " \n", " # Button click events\n", " prev_button.click(\n", " fn=previous_prompt,\n", " inputs=[index_state, prompt_type_dropdown],\n", " outputs=[index_state, prompt_display]\n", " )\n", " next_button.click(\n", " fn=next_prompt,\n", " inputs=[index_state, prompt_type_dropdown],\n", " outputs=[index_state, prompt_display]\n", " )\n", " \n", " # Dropdown change event\n", " prompt_type_dropdown.change(\n", " fn=lambda index, prompt_type: get_prompt(index, prompt_type),\n", " inputs=[index_state, prompt_type_dropdown],\n", " outputs=prompt_display\n", " )\n", " \n", " # Update index display\n", " index_state.change(\n", " fn=lambda index: str(index),\n", " inputs=index_state,\n", " outputs=index_display\n", " )\n", " \n", " # Launch the app\n", " demo.launch(height=900)\n", " \n", " \n", "\t\n", "\n", "'''\n", "\n", "display(HTML(code))" ] }, { "cell_type": "markdown", "id": "c086d26e-4c90-4b31-9ae2-77a3bdeffdfd", "metadata": {}, "source": [ "## Push Dataset to the Hub" ] }, { "cell_type": "markdown", "id": "6f609d12-518f-4830-8f8b-c374dbeaba7d", "metadata": {}, "source": [ "Its useful to get a train, test split, then we convert to `Dataset` and push to the hub. We also want to stratify on `'topic'`." ] }, { "cell_type": "code", "execution_count": 23, "id": "25f62e9b-09f8-4912-94fd-0ded680614b2", "metadata": { "tags": [] }, "outputs": [], "source": [ "from datasets import Dataset, DatasetDict\n", "from sklearn.model_selection import train_test_split\n", "\n", "# First split to create train and remaining (val + test)\n", "train_df, test_df = train_test_split(df, test_size=0.2, stratify=df['topic'], random_state=42)\n", "\n", "# Reset index to avoid index column in the Hugging Face Dataset\n", "train_df.reset_index(drop=True, inplace=True)\n", "test_df.reset_index(drop=True, inplace=True)\n", "\n", "# Convert each DataFrame to a Dataset object\n", "train_dataset = Dataset.from_pandas(train_df)\n", "test_dataset = Dataset.from_pandas(test_df)\n", "\n", "# Create a DatasetDict with the train, validation, and test datasets\n", "dataset_dict = DatasetDict({\n", " 'train': train_dataset,\n", " 'test': test_dataset\n", "})" ] }, { "cell_type": "code", "execution_count": 24, "id": "18a206c5-0e40-46b3-8dfb-20000789b6b5", "metadata": { "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c2178fd737a84de8934d40b4cd7d1e6d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Uploading the dataset shards: 0%| | 0/1 [00:00