{"id":121947,"date":"2026-03-10T03:26:18","date_gmt":"2026-03-10T03:26:18","guid":{"rendered":"https:\/\/make.wordpress.org\/core\/?p=121947"},"modified":"2026-03-10T11:16:56","modified_gmt":"2026-03-10T11:16:56","slug":"real-time-collaboration-in-the-block-editor","status":"publish","type":"post","link":"https:\/\/make.wordpress.org\/core\/2026\/03\/10\/real-time-collaboration-in-the-block-editor\/","title":{"rendered":"Real-Time Collaboration in the Block Editor"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Real-time collaboration (RTC) in the <span tabindex='0' class='glossary-item-container'>block<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Block<\/span> <span class='glossary-item-description'>Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience.<\/span><\/span><\/span> editor allows multiple users to edit content simultaneously by utilizing <a href=\"https:\/\/yjs.dev\/\">Yjs<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This <span tabindex='0' class='glossary-item-container'>dev note<span class='glossary-item-hidden-content'><span class='glossary-item-header'>dev note<\/span> <span class='glossary-item-description'>Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make\/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin\/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase.<\/span><\/span><\/span> covers three important aspects of the collaboration system that <span tabindex='0' class='glossary-item-container'>plugin<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Plugin<\/span> <span class='glossary-item-description'>A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory <a href=\"https:\/\/wordpress.org\/plugins\/\">https:\/\/wordpress.org\/plugins\/<\/a> or can be cost-based plugin from a third-party.<\/span><\/span><\/span> and theme developers should be aware of: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>How <span tabindex='0' class='glossary-item-container'>meta<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Meta<\/span> <span class='glossary-item-description'>Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress.<\/span><\/span><\/span> boxes affect collaboration mode<\/li>\n\n\n\n<li>The sync.providers <span tabindex='0' class='glossary-item-container'>filter<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Filter<\/span> <span class='glossary-item-description'>Filters are one of the two types of Hooks <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\">https:\/\/codex.wordpress.org\/Plugin_API\/Hooks<\/a>. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.<\/span><\/span><\/span> for customized sync transport<\/li>\n\n\n\n<li>Common issues when building plugins that can run in a collaborative environment<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Collaboration is disabled when meta boxes are present<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">The Problem<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Classic WordPress meta boxes are not synced by the real-time collaboration system. To avoid data loss, collaboration is disabled when meta boxes are detected on a post.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"660\" data-attachment-id=\"121950\" data-permalink=\"https:\/\/make.wordpress.org\/core\/2026\/03\/10\/real-time-collaboration-in-the-block-editor\/cleanshot-2026-03-04-at-14-27-30\/#main\" data-orig-file=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30.png\" data-orig-size=\"2401,1548\" data-comments-opened=\"1\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\",\"alt\":\"\"}' data-image-title=\"CleanShot 2026-03-04 at 14.27.30\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-300x193.png\" data-large-file=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-1024x660.png\" src=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-1024x660.png\" alt=\"Locked post modal when someone takes over a post\" class=\"wp-image-121950\" srcset=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-1024x660.png 1024w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-300x193.png 300w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-768x495.png 768w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-1536x990.png 1536w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.27.30-2048x1320.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\"><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"655\" data-attachment-id=\"121951\" data-permalink=\"https:\/\/make.wordpress.org\/core\/2026\/03\/10\/real-time-collaboration-in-the-block-editor\/cleanshot-2026-03-04-at-14-28-32\/#main\" data-orig-file=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32.png\" data-orig-size=\"2066,1321\" data-comments-opened=\"1\" data-image-meta='{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\",\"alt\":\"\"}' data-image-title=\"CleanShot 2026-03-04 at 14.28.32\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-300x192.png\" data-large-file=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-1024x655.png\" src=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-1024x655.png\" alt=\"Locked post modal when trying to take over a post\" class=\"wp-image-121951\" srcset=\"https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-1024x655.png 1024w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-300x192.png 300w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-768x491.png 768w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-1536x982.png 1536w, https:\/\/make.wordpress.org\/core\/files\/2026\/03\/CleanShot-2026-03-04-at-14.28.32-2048x1309.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\"><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">What developers need to know<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To allow collaboration, consider migrating meta box functionality to registered post meta with <code>show_in_rest<\/code> set to <code>true<\/code>, and use <span tabindex='0' class='glossary-item-container'>sidebar<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Sidebar<\/span> <span class='glossary-item-description'>A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme.<\/span><\/span><\/span> plugins or block-based alternatives that read from WordPress data stores. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nregister_post_meta( 'post', 'example_subtitle', [\n\t'show_in_rest' =&gt; true, \/\/ Required for syncing.  \n\t'single' =&gt; true,  \n\t'type' =&gt; 'string',\n\t'revisions_enabled' =&gt; true, \/\/ Recommended to track via revision history.\n] );\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">For more details on migrating from meta boxes, see the <a href=\"https:\/\/developer.wordpress.org\/block-editor\/how-to-guides\/metabox\/\">Meta Boxes guide<\/a> in the Block Editor Handbook.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">The sync.providers filter: Customizing the sync transport layer<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Overview<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>@wordpress\/sync<\/code> package uses a <a href=\"https:\/\/docs.yjs.dev\/ecosystem\/connection-provider\">provider-based architecture<\/a> for syncing collaborative editing data. By default, WordPress ships with an <span tabindex='0' class='glossary-item-container'>HTTP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>HTTP<\/span> <span class='glossary-item-description'>HTTP is an acronym for Hyper Text Transfer Protocol. HTTP  is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands.<\/span><\/span><\/span> polling provider. The <code>sync.providers<\/code> filter allows plugins to replace or extend the transport layer. For example, a plugin could switch from HTTP polling to WebSockets for lower-latency collaboration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><br>How it works<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The filter is applied during provider initialization:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst filteredProviderCreators = applyFilters(\n'sync.providers',\ngetDefaultProviderCreators() \/\/ array of provider creators\n);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A provider creator is a function that accepts a <code>ProviderCreatorOptions<\/code> object (containing the Yjs <code>ydoc<\/code>, <code>awareness<\/code>, <code>objectType<\/code>, and <code>objectId<\/code>) and returns a <code>ProviderCreatorResult<\/code> with <code>destroy<\/code> and <code>on<\/code> methods. The <code>destroy<\/code> method is called when the provider is no longer needed, and the on method allows the editor to listen for connection status events (<code>connecting<\/code>, <code>connected<\/code>, <code>disconnected<\/code>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><br>Example: WebSocket provider<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following example replaces the default HTTP polling provider with a WebSocket-based transport using the <code>y-websocket<\/code> library:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nimport { addFilter } from '@wordpress\/hooks';\nimport { WebsocketProvider } from 'y-websocket';\n\n\/**\n * Create a WebSocket provider that connects a Yjs document\n * to a WebSocket server for real-time syncing.\n *\/\nfunction createWebSocketProvider( { awareness, objectType, objectId, ydoc } ) {\n\tconst roomName = `${ objectType }-${ objectId ?? 'collection' }`;\n\tconst serverUrl = 'wss:\/\/example.com\/';\n\n\tconst provider = new WebsocketProvider(\n\t\tserverUrl,\n\t\troomName,\n\t\tydoc,\n\t\t{ awareness }\n\t);\n\n\treturn {\n\t\tdestroy: () =&gt; {\n\t\t\tprovider.destroy();\n\t\t},\n\t\ton: ( eventName, callback ) =&gt; {\n\t\t\tprovider.on( eventName, callback );\n\t\t},\n\t};\n}\n\naddFilter( 'sync.providers', 'my-plugin\/websocket-provider', () =&gt; {\n\treturn [ createWebSocketProvider ];\n} );\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><br>What developers need to know<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <code>sync.providers<\/code> filter is only applied when real-time collaboration is enabled.<\/li>\n\n\n\n<li>Return an empty array to disable collaboration entirely.<\/li>\n\n\n\n<li>Return a custom array to replace the default HTTP polling provider with your own transport (e.g., WebSockets, WebRTC).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Common issues when building plugins compatible with real-time collaboration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When real-time collaboration is active, all connected editors share the same underlying data state via Yjs. Plugins that interact with post data, especially custom post meta, need to follow certain patterns to avoid sync issues<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Syncing custom post meta values<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In addition to being registered, custom meta field <span tabindex='0' class='glossary-item-container'>UI<span class='glossary-item-hidden-content'><span class='glossary-item-header'>UI<\/span> <span class='glossary-item-description'>User interface<\/span><\/span><\/span> must be consumed from the WordPress data store and passed to controlled input components.<br>Always derive the input value directly from the WordPress data store via <code>useSelect<\/code>. In addition, use <code>value<\/code> instead of <code>defaultValue<\/code> on input components so the input always reflects the current data store state.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst metaValue = useSelect(\n\tselect =&gt; select( 'core\/editor' ).getEditedPostAttribute( 'meta' )?.example_subtitle,\n\t[]\n);\n\n&lt;input\n\tvalue={ metaValue || '' }\n\tonChange={ event =&gt; {\n\t\teditPost( { meta: { example_subtitle: event.target.value } } );\n\t} }\n\/&gt;\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Avoiding local component state for shared data<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When building a plugin UI that reads from the WordPress data store, avoid copying that data into local <span tabindex='0' class='glossary-item-container'>React<span class='glossary-item-hidden-content'><span class='glossary-item-header'>React<\/span> <span class='glossary-item-description'>React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.\r<a href=\"https:\/\/reactjs.org\/\">https:\/\/reactjs.org<\/a><\/span><\/span><\/span> state with useState. This applies to any shared data, such as post meta or block attributes. Doing so disconnects your component from the shared collaborative state: updates from other clients will update the store, but your component won\u2019t reflect them after the initial render, leading to stale or conflicting data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Blocks with side effects on insertion<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Custom blocks that trigger side effects on insertion will trigger that side effect for all connected collaborators, since block content syncs immediately upon insertion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, instead of auto-opening a modal when a block is inserted, show a placeholder with a button that opens the modal on click. This ensures side effects are intentional and local to the user taking the action.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">Credits<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Props <a href=\"https:\/\/profiles.wordpress.org\/czarate\/\">@czarate<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/alecgeatches\/\">@alecgeatches,<\/a> <a href=\"https:\/\/profiles.wordpress.org\/maxschmeling\/\">@maxschmeling<\/a>, <a href=\"https:\/\/profiles.wordpress.org\/paulkevan\/\">@paulkevan<\/a>, and <a href=\"https:\/\/profiles.wordpress.org\/shekharnwagh\/\">@shekharwagh<\/a> for building real-time collaboration in the block editor alongside <a href=\"https:\/\/profiles.wordpress.org\/ingeniumed\/\">@ingeniumed<\/a>, and for technical review and proofreading of this dev note.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Parts of this work are derived from contributions made by <a href=\"https:\/\/profiles.wordpress.org\/dmonad\/\">@dmonad<\/a> in\u00a0<a href=\"https:\/\/github.com\/WordPress\/gutenberg\/pull\/68483\">this PR<\/a>, and utilizes his Yjs library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Props to\u00a0<a href=\"https:\/\/profiles.wordpress.org\/wildworks\/\">@wildworks<\/a> and <a href=\"https:\/\/profiles.wordpress.org\/tyxla\/\">@tyxla<\/a>\u00a0for proofreading this dev note.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/dev-notes-7-0\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>dev-notes-7-0<\/a>, <a href=\"https:\/\/make.wordpress.org\/core\/tag\/7-0\/\" class=\"tag\"><span class=\"tag-prefix\">#<\/span>7-0<\/a><\/p>\n<nav class='o2-post-footer-actions'><ul class='o2-post-footer-action-row'><li class='o2-post-footer-action'><a href=\"https:\/\/login.wordpress.org\/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F10%2Freal-time-collaboration-in-the-block-editor%2F%23respond&#038;locale=en_US\" title=\"Login to Reply\"  class=\"genericon  genericon-reply\"  data-action=\"login-to-reply\"  data-actionstate=\"default\" >Login to Reply<\/a><\/li><\/ul><div class='o2-post-footer-action-likes'><\/div><ul class='o2-post-footer-action-row'><\/ul><\/nav>","protected":false},"excerpt":{"rendered":"<p>Real-time collaboration (RTC) in the blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent [&hellip;]<\/p>\n","protected":false},"author":20796576,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"{\"document\":\"AAChB4PWqpIet5DZ\/hu91YqUGdCXzaYQAPHtppcGCP3VipQZCLHtppcG\/dWKlBkPse2mlwa91YqUGbHtppcGvdWKlBnx7aaXBgD91YqUGQXx7aaXBgD91YqUGWXx7aaXBgD91YqUGQvx7aaXBgD91YqUGQXx7aaXBgD91YqUGRGx7aaXBv3VipQZC7HtppcG\/dWKlBkMse2mlwb91YqUGRGX1eCzFoXwxv4S8e2mlwbCAf3VipQZAMaUtY8GA\/3VipQZB8aUtY8GBf3VipQZA4Xwxv4SsrT4gRKG0+bbEZevp9EQ8e2mlwYAkJfNphDGlLWPBgLEgOrFAwCrhe\/LELHtppcGhIDqxQOrhe\/LEMSA6sUDA6uF78sQhIDqxQOrhe\/LEISA6sUDse2mlwbEgOrFAw\/x7aaXBgLrhe\/LEEuEgOrFA\/HtppcGAeuF78sQAPHtppcGAKuF78sQse2mlwbrhe\/LEArx7aaXBgqrhe\/LEPHtppcGAauF78sQse2mlwarhe\/LELHtppcGq4XvyxCx7aaXBquF78sQse2mlwarhe\/LELHtppcGq4XvyxCx7aaXBquF78sQse2mlwarhe\/LELHtppcGq4XvyxCx7aaXBquF78sQ8e2mlwYAq4XvyxCEgOrFA7HtppcGhIDqxQOx7aaXBoSA6sUDse2mlwaEgOrFA7HtppcGhIDqxQOx7aaXBoSA6sUDse2mlwbrhe\/LEAKx7aaXBquF78sQse2mlwarhe\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\/A\/GmAPE5AHEKazPBR4gAg4mkAMc2B8JAQoJAAoJANLIB5AbnA20xQcDAcSNA4aNAwMA2poCnJoCAwDSOJw4CQEKCQAKCQDI8AeQG5wNqscHAwH6jgO8jgMDANCcApKcAgMAyDraJMCQA6zuAwkBCgkACgkA9DHKwAeQG5wNrssHAwH+kgOAkwMDANSgApagAgMAzD76\/AgDAAQCAQADALgS3mC4ELZ9xKsBrgryBNYMoqkCAQC8AwMCiAEEAqwBBAikAhgCuAKQG5wNtrgEsHKO4gHg7AkBBLIhAgD0IdETKAAhAaEBwQAAAMEAAADBAAAAwQAAAMcAKAEnASgAJwAoAQQAxwAhACgAIQAnACEBJwAAAKEAqAAhACgEqAHBAAAAwQAAAMcAKAEnAQQAKAAnAMcAKAEnAQQAhB8oACcAxB\/HACgBJwEEAIQBKAAnAMQBxwAoACcBBAAnACgBxwAoACcBBAAnACgBIQQoBMEAAADHACgAJwEhACgHxwAoACcBIQAoACEAKASoACgAxwAhACgAIQEnACEBJwAAAKEAqAAhACgEqAEhAcRhqAAoAKgHKACoAygAqAwhAsQAqAYhAMQAwQDEAcEAxACoAKECqAChAKgBKACoACgAqAAoAKECxADBAAAAgQDHACEAKAAhACgAJwEoACcABACBAsEBgQCEAMEAxADBBcQBwQXEAMEBxADBAMQAwQDEAMEAxADBAMQBoQCoACEAwQAAAKgAwQAAAIEAxwAhACgBJwEBAIQAKAAnAMQGwQDEBsEAxADBAMQAgQChAMEFoQLBBaEBwQAAAMcAIQAoAScBKAAnAAQAgQCEAIEAhAGBAIQAgQDEA4QAIQChAqgAxAKoACgAxAWoAKEChACBAIQAgQAhBScCKAIhACgCJwAoCyEAKAAhAScABwAhACgBJwEoACcAoQAEAIQAgQCHACEAKAAhACcBBACBACEAJwCHACEAKAAhACcBBACBACEAJwCHACEAKAAhACcBBACBACEAJwCBAAAAgQAAAIcAIQAoACEAJwEBAIQAgQCEAIEAhACBACEAJwCHACEAKAAhACcBBACBACEAJwCBAAAAgQAAAIcAIQAoACEAJwEEAIEOIQAnAIcAIQAoACEAJwEEACEAJwAEAMcAIQAoACEAJwAhAScAAAChAKgAKAGhAKgAIQDHACEAKAAhACcBIQAnAAQAgQCoAKEAqAAhAKgAxwAhACgBJwEoACcABADHACEAKAAhACcAIQEnAAAAoQCoACEAJwAoACEAKAPHACEAKAAhACcAIQEnAAAAoQCoACEAJwAoACEAKAOhAKgAoQCoAMEAAAChAKgAIQCoAIEAxwAhACgBJwEEAIQDgQAoACcAwQAAAMQDAADBAAAAwQAAAMcAIQAoAScBKAAnAAQAhAEEAIEAhAaBAIQCgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQEgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhAGBAIQAgQCEAIEAhACBAIQAgQCEAYEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhASBAIQKgQCEAIEAhAqBAIQAgQGEAoEAhAGBAIQAgQCEAIEAhACBAIQigQCEAoEBhAGBAIQAgQCEAIEBhACBAYQAgQCEAIEAhACBAYQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQGEAIEAhACBAIQAgQCEAIEAhACBAIQAgQCEAIEAhACBAIQAgQSEAIEAhACBAIQAgQCEAoEAhAKBAIQBgQCEBoEAhAKBAIQDgQCEAoEAhACBAIQEgQCEAIEAhACBAIQCgQCEB4EBhAOBBIQBgQCEAIEAhACBAIQAgQCEAIEChACBAIQAgQCEAIEAhACBA4QAgQCEAIEAhACBAoQAgQCEAIEAhACBAIQAgQCEA4EAhACBAIQAgQCEAIEAhAOBAIQAgQCEAoEAhACBAIQCgQCEA4EAhACBAIQKgQCEBYEAhACBAIQBgQCEAIEAhACBAIQCgQCEAIEAhACBAIQBoQHBCKgAIQHBBaEAwQihAcQBxwAhACgAIQAnACEBJwAAAKEAqAAoAccAIQAoACEAJwEhACcABACBAKEAqAAoAMEAAAChAKgAIQCoAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQAAAMEAAADBAAAAwQjED8EAxAvBAMQBwQDEAMEAxADBAMQAwQDEAMEAxADBAMQDwQLEAMEAxAHBAMQAwQDEAMEAxAHBAMQAwQDEAcEAxAHBAMQiwQDEA8EAxADBAMQAwQDEAMEAxADBAMQAwQDEAcEAxADBAMQAwQHEAMEAxADBAMQBwQDEAMEAxADBAcQAwQDEAcEAxADBAcQBwRHEAcEDxADBAMQBwQDEAMEAxADBAMQDoQDBCqECqAAhAKgAxwAhACgAIQAnACEBJwAAAKEAqAAoAQcAIQAoAScBBACEAScAhwAhACgBJwEEACcAhwAhACgBJwEEACcAxAGBAAAAoQDHACEAKAAhACcAIQEnAAAAoQCoACgBwQAAAMEAAADBAAAAxwAhACgAIQAnASEAJwChAKgAKAABAKEAqAAoAIQAwQbEBMEAxBzBAMQDwQKhAMEMoQGBAMcAIQAoAScBAQCEAIEAKAAnAIEAxwAhACgBJwEBAIQHgQAoACcAxAbHACEAKAAhACcBAQAhACcAwQAAAIEAoQCoACgAhACBAMcAIQAoAScBAQCEAIEAKAAnAMEAAADHACEAKAAhACcBIQAnAAEAoQCoACgAhACBAMEAAADHACEAKAEnAQEAhAAoACcAxwAhACgAIQAnACEBJwAAAKEAqAAoAcEbgQDHACEAKAEnAQEAhAAoACcAwQ7EAMEExADBDcQAwQLECMEAxADBAMQAwQDEAMEAxADBAMQAwQDEA8EBxADBAcQAwQLEAMEAxADBAMQBwQDEAMEAxADBAsQBwQTEAcEBxAPBAcQEwQTEB8EAxAPBAcQAwQDEAsEAxADBAMQRoQDBD6EBwQmhAMEPoQFEAIEAAAChAKgAKADBCcQHoQDBD6EBAADBAAAAwQAAAIEAxwAhACgBJwEEAIQHKAAnAMQHwQmhAMEPoQHBCaEAwQ+hAcEAAADBAAAAwQnEAKEAwQLEA8EAxALBAMQCwQChASEAxATBAMQCqAsAAKEEAAChBgAAqAgoAKEAIQDEAKEBxAEhAKECIQChACEAoQAoAKEAKAChACgAoQAoAKEAKAChACgAoQAoAKEAKAAAAKEAKAChACgAoQAoAKEAKAChACgAAAChACgAoQAoAKgAKACoACgAqAAoAKEAKAChACgAoQAoAKEAKAChACgAAAChACgAoQAoAKEAKAChACgAoQAoAKEAKAChACEAoQAhAMcAIQAoACEBJwAhAAAAIQAnAAAAoQCoACgBBwAhACgBJwEBAIQAgQAnAIcAIQAoAScBAQCEAIEAJwDEAIcAIQAoAScBAQCEAIEAJwDEAccAIQAoACEAKAAnAQQAKAAnAMQQoQDBBaEBxADBAMQAwQDEAcEAxAHBAMSEsgG0pwFzdGF0ZXZlcnNpb25zdGF0ZXZlcnNpb25zdGF0ZXZlcnNpb25pc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRvcmlnaW5hbENvbnRlbnRGb3IgZXhhbXBsZTpjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NsYW5ndWFnZWxpbmVOdW1iZXJzZmlyc3RMaW5lTnVtYmVyd3JhcExpbmVzbWFrZVVSTHNDbGlja2FibGVxdWlja0NvZGVpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIGZpbHRlciBpcyBhcHBsaWVkIGR1cmluZyBwcm92aWRlciBpbml0aWFsaXphdGlvbjpkcm9wQ2FwaW5uZXJCbG9ja3Npc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50QSBwcm92aWRlciBjcmVhdG9yIGlzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgUHJvdmlkZXJDcmVhdG9yT3B0aW9ucyBvYmplY3QgKGNvbnRhaW5pbmcgdGhlIFlqcyB5ZG9jLCBhd2FyZW5lc3MsIG9iamVjdFR5cGUsIGFuZCBvYmplY3RJZCkgYW5kIHJldHVybnMgYSBQcm92aWRlckNyZWF0b3JSZXN1bHQgd2l0aCBkZXN0cm95IGFuZCBvbiBtZXRob2RzLiBUaGUgZGVzdHJveSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHByb3ZpZGVyIGlzIG5vIGxvbmdlciBuZWVkZWQsIGFuZCB0aGUgb24gbWV0aG9kIGFsbG93cyB0aGUgZWRpdG9yIHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbiBzdGF0dXMgZXZlbnRzIChjb25uZWN0aW5nLCBjb25uZWN0ZWQsIGRpc2Nvbm5lY3RlZCkuZHJvcENhcGlubmVyQmxvY2tzPGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNkZT5vPC9jb2RlPjxjZGU+bzwvY29kZT48Y29kZT48L2NvZGU+PGNvPmRlPC9jb2RlPjxjZGU+bzwvY29kZT48Y28+ZGU8L2NvZGU+PGRlPmNvPC9jb2RlPjxkZT5jbzwvY29kZT48Y29lPmQ8L2NvZGU+aXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBmb2xsb3dpbmcgZXhhbXBsZSByZXBsYWNlcyB0aGUgZGVmYXVsdCBIVFRQIHBvbGxpbmcgcHJvdmlkZXIgd2l0aCBhIFdlYlNvY2tldC1iYXNlZCB0cmFuc3BvcnQgdXNpbmcgdGhlIHktd2Vic29ja2V0IGxpYnJhcnk6ZHJvcENhcGlubmVyQmxvY2tzPGNvZGU+PC9jb2RlPmlzVmFsaWRhdHRyaWJ1dGVzY29udGVudDxicj5Ib3cgaXQgd29ya3Npbm5lckJsb2Nrc25hbWVsZXZlbGlzVmFsaWRhdHRyaWJ1dGVzY29udGVudDxicj5FeGFtcGxlOiBXZWJTb2NrZXQgcHJvdmlkZXJpbm5lckJsb2Nrc25hbWVsZXZlbGNsaWVudElkY2xpZW50SWRjbGllbnRJZGNsaWVudElkY2xpZW50SWRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRpc1ZhbGlkYXR0cmlidXRlc2lubmVyQmxvY2tzY2xpZW50SWRuYW1lbGluZU51bWJlcnNmaXJzdExpbmVOdW1iZXJ3cmFwTGluZXNtYWtlVVJMc0NsaWNrYWJsZXF1aWNrQ29kZWxhbmd1YWdlY29udGVudGlzVmFsaWRhdHRyaWJ1dGVzaW5uZXJCbG9ja3NjbGllbnRJZG5hbWVsYW5ndWFnZWxpbmVOdW1iZXJzZmlyc3RMaW5lTnVtYmVyd3JhcExpbmVzbWFrZVVSTHNDbGlja2FibGVxdWlja0NvZGVjb250ZW50Y2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzbGFuZ3VhZ2VsaW5lTnVtYmVyc2ZpcnN0TGluZU51bWJlcndyYXBMaW5lc21ha2VVUkxzQ2xpY2thYmxlcXVpY2tDb2Rlc3RhdGV2ZXJzaW9uc3RhdGV2ZXJzaW9uc3ludGF4aGlnaGxpZ2h0ZXIvYWdhZyJwaHAieXR4aGlnaHQtIgogICAgICAKICAKc3ludGF4aGlnaGxpZ2h0ZXIvc3ludGF4aGlnaGxpZ2h0ZXIvYWdhZyJqc2NpcHQieXR4aGlnaHRyY29kCgoKc3ludGF4aGlnaGxpZ2h0ZXIvc3ludGF4aGlnaGxpZ2h0ZXIvYWdhZyJqc2NpcHQic3l0eGhnaGlodHJvZAoKCgoKCgoKCQoJCgoJCgkJCgkJCgkJCgkJCgkKCgkKCQkKCQkJCgkJCgkJCgkJCQoJCQoJCgoKCgkKc3ludGF4aGlnaGxpZ2h0ZXIvc3ludGF4aGlnaGxpZ2h0ZXIvYWdhZyJqc2NpcHQic3l0eGhnaGlodHJvZAoJCgkKCgoKCQoJCgkJCgkKc3ludGF4aGlnaGxpZ2h0ZXIvb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50c3RhdGV2ZXJzaW9uc3RhdGV2ZXJzaW9uc3RhdGV2ZXJzaW9uLCAjNy0wc3RhdGV2ZXJzaW9uYnkgdXRpbGl6aW5nIGEgaHJlZj0iaHR0cHM6L3lqcy5kZXYvIj48L2E+Ljwvb3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50b3JpZ2luYWxDb250ZW50WWpzY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzUHJvcHMgdG8uIDxhaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL3dpbGR3b3Jrcy8iPkB3aWxkd29ya3M8L2E+IGFuZCBmb3IgcHJvb2ZyZWFkaW5nIHRoaXMgZGV2IG5vdGU8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvdHl4bGEvIj50eXhsYTwvYT5AbGV2ZWxjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRQcm9wcyA8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvY3phcmF0ZS8iPkBjemFyYXRlPC9hPiwgPGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL2FsZWNnZWF0Y2hlcy8iPkBhbGVjZ2VhdGNoZXMsPC9hPiA8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvbWF4c2NobWVsaW5nLyI+QG1heHNjaG1lbGluZzwvYT4sIDxhIGhyZWY9Imh0dHBzOi8vcHJvZmlsZXMud29yZHByZXNzLm9yZy9wYXVsa2V2YW4vIj5AcGF1bGtldmFuPC9hPiwgYW5kIDxhIGhyZWY9Imh0dHBzOi8vcHJvZmlsZXMud29yZHByZXNzLm9yZy9zaGVraGFybndhZ2gvIj5Ac2hla2hhcndhZ2g8L2E+IGZvciBidWlsZGluZyByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBpbiB0aGUgYmxvY2sgZWRpdG9yIGFsb25nc2lkZSA8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvaW5nZW5pdW1lZC8iPkBpbmdlbml1bWVkPC9hPiwgYW5kIGZvciB0ZWNobmljYWwgcmV2aWV3IGFuZCBwcm9vZnJlYWRpbmcgb2YgdGhpcyBkZXYgbm90ZS5kcm9wQ2FwaW5uZXJCbG9ja3NZanNoZWRpbnsibGV2ZWwiOjN9IGgzIGNsYXNzPSJ3LWJsb2NrLWhlYWRpbmciL2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPlByb3BzIHRvPGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL3dpbGR3b3Jrcy8iPkB3aWxkd29ya3M8L2E+IGFuZCA8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvdHl4bGEvIj5AdHl4bGE8L2E+Zm9yIHByb29mcmVhZGluZyB0aGlzIGRldiBub3RlLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc1BhcnRzIG9mIHRoaXMgd29yayBhcmUgZGVyaXZlZCBmcm9tIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSAgaW48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL2d1dGVuYmVyZy9wdWxsLzY4NDgzIj50aGlzIFBSPC9hPjxhaHJlZj0iaHR0cHM6Ly9wcm9mbGVzLndvcmRwcmVzcy5vcmcvZG1vYWQvIj5AZG1vbmFkPC9hPiBpbiwgYW5kIHV0aWxpemVzIGhpcyBZanMgbGlicmFyeS5zdGF0ZXZlcnNpb24mbmJzcDsmbmJzcDsmbmJzcDtkb2N1bWVudHNsdWcgICAgICAsICM3LTBzdGF0ZXZlcnNpb25zdGF0ZXZlcnNpb25zdGF0ZXZlcnNpb25zdGF0ZXZlcnNpb25kb2N1bWVudGRhdGVkb2N1bWVudHN0YXR1c2RvY3VtZW50dGl0bGVkb2N1bWVudGNvbnRlbnRkb2N1bWVudGV4Y2VycHRkb2N1bWVudGF1dGhvcmRvY3VtZW50ZmVhdHVyZWRfbWVkaWFkb2N1bWVudGNvbW1lbnRfc3RhdHVzZG9jdW1lbnRwaW5nX3N0YXR1c2RvY3VtZW50c3RpY2t5ZG9jdW1lbnR0ZW1wbGF0ZWRvY3VtZW50Zm9ybWF0ZG9jdW1lbnRtZXRhYWR2YW5jZWRfc2VvX2Rlc2NyaXB0aW9uamV0cGFja19zZW9faHRtbF90aXRsZWpldHBhY2tfc2VvX25vaW5kZXhqZXRwYWNrX3Bvc3Rfd2FzX2V2ZXJfcHVibGlzaGVkX2pldHBhY2tfbmV3c2xldHRlcl9hY2Nlc3NfamV0cGFja19kb250X2VtYWlsX3Bvc3RfdG9fc3Vic19qZXRwYWNrX25ld3NsZXR0ZXJfdGllcl9pZF9qZXRwYWNrX21lbWJlcnNoaXBzX2NvbnRhaW5zX3BheXdhbGxlZF9jb250ZW50X2pldHBhY2tfbWVtYmVyc2hpcHNfY29udGFpbnNfcGFpZF9jb250ZW50Zm9vdG5vdGVzamV0cGFja19wdWJsaWNpemVfbWVzc2FnZWpldHBhY2tfcHVibGljaXplX2ZlYXR1cmVfZW5hYmxlZGpldHBhY2tfc29jaWFsX3Bvc3RfYWxyZWFkeV9zaGFyZWRqZXRwYWNrX3NvY2lhbF9vcHRpb25zZG9jdW1lbnRjYXRlZ29yaWVzZG9jdW1lbnR0YWdzZG9jdW1lbnRibG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NSZWFsLXRpbWUgY29sbGFib3JhdGlvbiAoUlRDKSBpbiB0aGUgYmxvY2sgZWRpdG9yIGFsbG93cyBtdWx0aXBsZSB1c2VycyB0byBlZGl0IGNvbnRlbnQgc2ltdWx0YW5lb3VzbHkuY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50Q29sbGFib3JhdGlvbiBpcyBkaXNhYmxlZCB3aGVuIG1ldGEgYm94ZXMgYXJlIHByZXNlbnRkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRXaGF0IGRldmVsb3BlcnMgbmVlZCB0byBrbm93ZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VGhlIHN5bmMucHJvdmlkZXJzIGZpbHRlcjogQ3VzdG9taXppbmcgdGhlIHN5bmMgdHJhbnNwb3J0IGxheWVyZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50PGJyPldoYXQgZGV2ZWxvcGVycyBuZWVkIHRvIGtub3dkcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRDb21tb24gaXNzdWVzIHdoZW4gYnVpbGRpbmcgcGx1Z2lucyBjb21wYXRpYmxlIHdpdGggcmVhbC10aW1lIGNvbGxhYm9yYXRpb25kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRDcmVkaXRzZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZGV2LW5vdGVzLCAjZGV2LW5vdGVzLTctMGxldmVsaW5uZXJCbG9ja3NSZWFsLVRpbWUgQ29sbGFib3JhdGlvbiBpbiB0aGUgQmxvY2sgRWRpdG9yY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzb3BhY2l0eXRhZ05hbWVsZXZlbGNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc1RoZSBQcm9ibGVtbGV2ZWxjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NDbGFzc2ljIFdvcmRQcmVzcyBtZXRhIGJveGVzIGFyZSBub3Qgc3luY2VkIGJ5IHRoZSByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBzeXN0ZW0uIFRvIGF2b2lkIGRhdGEgbG9zcywgY29sbGFib3JhdGlvbiBpcyBkaXNhYmxlZCB3aGVuIG1ldGEgYm94ZXMgYXJlIGRldGVjdGVkIG9uIGEgcG9zdC5jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NhbHRjYXB0aW9uaWRsaW5rdXJsaHJlZnNpemVTbHVnbGlua0Rlc3RpbmF0aW9uY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzYWx0Y2FwdGlvbmlkbGlua3VybGhyZWZzaXplU2x1Z2xpbmtEZXN0aW5hdGlvbmxldmVsY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50VG8gYWxsb3cgY29sbGFib3JhdGlvbiwgY29uc2lkZXIgbWlncmF0aW5nIG1ldGEgYm94IGZ1bmN0aW9uYWxpdHkgdG8gcmVnaXN0ZXJlZCBwb3N0IG1ldGEgd2l0aCBzaG93X2luX3Jlc3Qgc2V0IHRvIHRydWUsIGFuZCB1c2Ugc2lkZWJhciBwbHVnaW5zIG9yIGJsb2NrLWJhc2VkIGFsdGVybmF0aXZlcyB0aGF0IHJlYWQgZnJvbSBXb3JkUHJlc3MgZGF0YSBzdG9yZXMuIGRyb3BDYXBpbm5lckJsb2Nrczxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzRm9yIG1vcmUgZGV0YWlscyBvbiBtaWdyYXRpbmcgZnJvbSBtZXRhIGJveGVzLCBzZWUgdGhlIE1ldGEgQm94ZXMgZ3VpZGUgaW4gdGhlIEJsb2NrIEVkaXRvciBIYW5kYm9vay48IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UmVhbC10aW1lIGNvbGxhYm9yYXRpb24gKFJUQykgaW4gdGhlIGJsb2NrIGVkaXRvciBhbGxvd3MgbXVsdGlwbGUgdXNlcnMgdG8gZWRpdCBjb250ZW50IHNpbXVsdGFuZW91c2x5IFRoaXMgZGV2IG5vdGUgY292ZXJzIHRocmVlIGltcG9ydGFudCBhc3BlY3RzIG9mIHRoZSBjb2xsYWJvcmF0aW9uIHN5c3RlbSB0aGF0IHBsdWdpbiBhbmQgdGhlbWUgZGV2ZWxvcGVycyBzaG91bGQgYmUgYXdhcmUgb2Y6IGhvdyBtZXRhIGJveGVzIGFmZmVjdCBjb2xsYWJvcmF0aW9uIG1vZGUgdGhlIHN5bmMucHJvdmlkZXJzIGZpbHRlciBmb3IgY3VzdG9taXplZCBzeW5jIHRyYW5zcG9ydCAgb21tb24gaXNzdWVzIHdoZW4gYnVpbGRpbmcgcGx1Z2lucyB0aGF0IGNhbiBydW4gaW4gYSBjb2xsYWJvcmF0aXZlIGVudmlyb25tZW50PC8+CjwhLS0gL3dwOnAgLS0+Cgo8IS0tIHdwOnNlcGFyYXRvciAtLT4KPGhyIGNsYXNzPSJ3cC1ibG9jay1zZXBhcmF0b3IgaGFzLWFscGhhLWNoYW5uZWwtb3BhY2l0eSIvPgo8IS0tIC93cDpzZXBhcmF0b3IgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgLS0+CjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+Q29sbGFib3JhdGlvbiBpcyBkaXNhYmxlZCB3aGVuIG1ldGEgYm94ZXMgYXJlIHByZXNlbnQ8L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjN9IC0tPgo8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlRoZSBQcm9ibGVtPC9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5DbGFzc2ljIFdvcmRQcmVzcyBtZXRhIGJveGVzIGFyZSBub3Qgc3luY2VkIGJ5IHRoZSByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBzeXN0ZW0uIFRvIGF2b2lkIGRhdGEgbG9zcywgY29sbGFib3JhdGlvbiBpcyBkaXNhYmxlZCB3aGVuIG1ldGEgYm94ZXMgYXJlIGRldGVjdGVkIG9uIGEgcG9zdC48L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aW1hZ2UgeyJpZCI6MTIxOTUwLCJzaXplU2x1ZyI6ImxhcmdlIiwibGlua0Rlc3RpbmF0aW9uIjoibWVkaWEifSAtLT4KPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2staW1hZ2Ugc2l6ZS1sYXJnZSI+PGEgaHJlZj0iaHR0cHM6Ly9tYWtlLndvcmRwcmVzcy5vcmcvY29yZS9maWxlcy8yMDI2LzAzL0NsZWFuU2hvdC0yMDI2LTAzLTA0LWF0LTE0LjI3LjMwLnBuZyI+PGltZyBzcmM9Imh0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvZmlsZXMvMjAyNi8wMy9DbGVhblNob3QtMjAyNi0wMy0wNC1hdC0xNC4yNy4zMC0xMDI0eDY2MC5wbmciIGFsdD0iTG9ja2VkIHBvc3QgbW9kYWwgd2hlbiBzb21lb25lIHRha2VzIG92ZXIgYSBwb3N0IiBjbGFzcz0id3AtaW1hZ2UtMTIxOTUwIi8+PC9hPjwvZmlndXJlPgo8IS0tIC93cDppbWFnZSAtLT4KCjwhLS0gd3A6aW1hZ2UgeyJpZCI6MTIxOTUxLCJzaXplU2x1ZyI6ImxhcmdlIiwibGlua0Rlc3RpbmF0aW9uIjoibWVkaWEifSAtLT4KPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2staW1hZ2Ugc2l6ZS1sYXJnZSI+PGEgaHJlZj0iaHR0cHM6Ly9tYWtlLndvcmRwcmVzcy5vcmcvY29yZS9maWxlcy8yMDI2LzAzL0NsZWFuU2hvdC0yMDI2LTAzLTA0LWF0LTE0LjI4LjMyLnBuZyI+PGltZyBzcmM9Imh0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvZmlsZXMvMjAyNi8wMy9DbGVhblNob3QtMjAyNi0wMy0wNC1hdC0xNC4yOC4zMi0xMDI0eDY1NS5wbmciIGFsdD0iTG9ja2VkIHBvc3QgbW9kYWwgd2hlbiB0cnlpbmcgdG8gdGFrZSBvdmVyIGEgcG9zdCIgY2xhc3M9IndwLWltYWdlLTEyMTk1MSIvPjwvYT48L2ZpZ3VyZT4KPCEtLSAvd3A6aW1hZ2UgLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+V2hhdCBkZXZlbG9wZXJzIG5lZWQgdG8ga25vdzwvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+VG8gYWxsb3cgY29sbGFib3JhdGlvbiwgY29uc2lkZXIgbWlncmF0aW5nIG1ldGEgYm94IGZ1bmN0aW9uYWxpdHkgdG8gcmVnaXN0ZXJlZCBwb3N0IG1ldGEgd2l0aCA8Y29kZT5zaG93X2luX3Jlc3Q8L2NvZGU+IHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiwgYW5kIHVzZSBzaWRlYmFyIHBsdWdpbnMgb3IgYmxvY2stYmFzZWQgYWx0ZXJuYXRpdmVzIHRoYXQgcmVhZCBmcm9tIFdvcmRQcmVzcyBkYXRhIHN0b3Jlcy4gPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+Rm9yIGV4YW1wbGU6PC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmNvZGUgeyJsbnVlIjp9IC0tPgo8cHJlIGNsYXNzPSJ3cC1ibG9jay1zbmFnaGxpZXJjb2RlPnJlZ2lzdGVyX3Bvc3RfbWV0YSggJ3Bvc3QnLCAnZXhhbXBsZV9zdWJ0aXRsZScsIFsnc2hvd19pbl9yZXN0JyA9IHRydWUsIC8vIFJlcXVpcmVkIGZvciBzeW5jaW5nLidzaW5nbGUnID0gdHJ1ZSwndHlwZScgPSAnc3RyaW5nJywncmV2aXNpb25zX2VuYWJsZWQnID0gdHJ1ZSwgLy8gUmVjb21tZW5kZWQgdG8gdHJhY2sgdmlhIHJldmlzaW9uIGhpc3RvcnkuXSApOzwvcHJlPgo8IS0tIC93cDpjb2RlIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPkZvciBtb3JlIGRldGFpbHMgb24gbWlncmF0aW5nIGZyb20gbWV0YSBib3hlcywgc2VlIHRoZSBNZXRhIEJveGVzIGd1aWRlIGluIHRoZSBCbG9jayBFZGl0b3IgSGFuZGJvb2suPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFyYXBoIC0tPgo8cD5UaGUgc3luYy5wcm92aWRlcnMgZmlsdGVyOiBDdXN0b21pemluZyB0aGUgc3luYyB0cmFuc3BvcnQgbGF5ZXI8Yj5PdmVydmlldzxUaGUgQHdvcmRwcmVzcy9zeW5jIHBhY2thZ2UgdXNlcyBhIHByb3ZpZGVyLWJhc2VkIGFyY2hpdGVjdHVyZSBmb3Igc3luY2luZyBjb2xsYWJvcmF0aXZlIGVkaXRpbmcgZGF0YS4gQnkgZGVmYXVsdCwgV29yZFByZXNzIHNoaXBzIHdpdGggYW4gSFRUUCBwb2xsaW5nIHByb3ZpZGVyLiBUaGUgc3luYy5wcm92aWRlcnMgZmlsdGVyIGFsbG93cyBwbHVnaW5zIHRvIHJlcGxhY2Ugb3IgZXh0ZW5kIHRoZSB0cmFuc3BvcnQgbGF5ZXIuIEZvciBleGFtcGxlLCBhIHBsdWdpbiBjb3VsZCBzd2l0Y2ggZnJvbSBIVFRQIHBvbGxpbmcgdG8gV2ViU29ja2V0cyBmb3IgbG93ZXItbGF0ZW5jeSBjb2xsYWJvcmF0aW9uLjxicj5Ib3cgaXQgd29ya3M8VGhlIGZpbHRlciBpcyBhcHBsaWVkIGR1cmluZyBwcm92aWRlciBpbml0aWFsaXphdGlvbjo8PmNvc3QgZmlsdGVyZWRQcm92aWRlckNyZWF0b3JzID0gYXBwbHlGaWx0ZXJzKCdzeW5jLnByb3ZpZGVycycsZ2V0RGVmYXVsdFByb3ZpZGVyQ3JlYXRvcnMoKSAvLyBhcnJheSBvZiBwcm92aWRlciBjcmVhdG9ycyk7PEEgcHJvdmlkZXIgY3JlYXRvciBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFByb3ZpZGVyQ3JlYXRvck9wdGlvbnMgb2JqZWN0IChjb250YWluaW5nIHRoZSBZanMgeWRvYywgYXdhcmVuZXNzLCBvYmplY3RUeXBlLCBhbmQgb2JqZWN0SWQpIGFuZCByZXR1cm5zIGEgUHJvdmlkZXJDcmVhdG9yUmVzdWx0IHdpdGggZGVzdHJveSBhbmQgb24gbWV0aG9kcy4gVGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwcm92aWRlciBpcyBubyBsb25nZXIgbmVlZGVkLCBhbmQgdGhlIG9uIG1ldGhvZCBhbGxvd3MgdGhlIGVkaXRvciB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb24gc3RhdHVzIGV2ZW50cyAoY29ubmVjdGluZywgY29ubmVjdGVkLCBkaXNjb25uZWN0ZWQpLjxicj5FeGFtcGxlOiBXZWJTb2NrZXQgcHJvdmlkZXI8VGhlIGZvbGxvd2luZyBleGFtcGxlIHJlcGxhY2VzIHRoZSBkZWZhdWx0IEhUVFAgcG9sbGluZyBwcm92aWRlciB3aXRoIGEgV2ViU29ja2V0LWJhc2VkIHRyYW5zcG9ydCB1c2luZyB0aGUgeS13ZWJzb2NrZXQgbGlicmFyeTo8Pmlwb3J0IHsgYWRkRmlsdGVyIH0gZnJvbSAnQHdvcmRwcmVzcy9ob29rcyc7aW1wb3J0IHsgV2Vic29ja2V0UHJvdmlkZXIgfSBmcm9tICd5LXdlYnNvY2tldCc7LyoqICBDcmVhdGUgYSBXZWJTb2NrZXQgcHJvdmlkZXIgdGhhdCBjb25uZWN0cyBhIFlqcyBkb2N1bWVudCAgdG8gYSBXZWJTb2NrZXQgc2VydmVyIGZvciByZWFsLXRpbWUgc3luY2luZy4qL2Z1bmN0aW9uIGNyZWF0ZVdlYlNvY2tldFByb3ZpZGVyKCB7IGF3YXJlbmVzcywgb2JqZWN0VHlwZSwgb2JqZWN0SWQsIHlkb2MgfSApIHtjb25zdCByb29tTmFtZSA9ICR7IG9iamVjdFR5cGUgfS0keyBvYmplY3RJZCA\/PyAnY29sbGVjdGlvbicgfTtjb25zdCBzZXJ2ZXJVcmwgPSAnd3NzOi8vZXhhbXBsZS5jb20vJztjb25zdCBwcm92aWRlciA9IG5ldyBXZWJzb2NrZXRQcm92aWRlcihzZXJ2ZXJVcmwsb29tTmFtZSx5ZG9jLHsgYXdhcmVuZXNzIH0pO2V0dXJuIHtkZXN0cm95OiAoKSA9IHtwcm92aWRlci5kZXN0cm95KCk7fSxvbjogKCBldmVudE5hbWUsIGNhbGxiYWNrICkgPSB7cHJvdmlkZXIub24oIGV2ZW50TmFtZSwgY2FsbGJhY2sgKTt9LGFkZEZpbHRlciggJ3N5bmMucHJvdmlkZXJzJywgJ215LXBsdWdpbi93ZWJzb2NrZXQtcHJvdmlkZXInLCAoKSA9IHtldHVybiBbIGNyZWF0ZVdlYlNvY2tldFByb3ZpZGVyIF07fSApOzxicj5XaGF0IGRldmVsb3BlcnMgbmVlZCB0byBrbm93PFRoZSBzeW5jLnByb3ZpZGVycyBmaWx0ZXIgaXMgb25seSBhcHBsaWVkIHdoZW4gcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gaXMgZW5hYmxlZC48PlJldHVybiBhbiBlbXB0eSBhcnJheSB0byBkaXNhYmxlIGNvbGxhYm9yYXRpb24gZW50aXJlbHkuPD5SZXR1cm4gYSBjdXN0b20gYXJyYXkgdG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBIVFRQIHBvbGxpbmcgcHJvdmlkZXIgd2l0aCB5b3VyIG93biB0cmFuc3BvcnQgKGUuZy4sIFdlYlNvY2tldHMsIFdlYlJUQykuPC9wPgo8IS0tIC93cDpwYXJhcmFwIC0tPgo8IS0tIHdwOnBhcmFycGggLS0+CjxwPkNvbW1vbiBpc3N1ZXMgd2hlbiBidWlsZGluZyBwbHVnaW5zIGNvbXBhdGlibGUgd2l0aCByZWFsLXRpbWUgY29sbGFib3JhdGlvbjxXaGVuIHJlYWwtdGltZSBjb2xsYWJvcmF0aW9uIGlzIGFjdGl2ZSwgYWxsIGNvbm5lY3RlZCBlZGl0b3JzIHNoYXJlIHRoZSBzYW1lIHVuZGVybHlpbmcgZGF0YSBzdGF0ZSB2aWEgWWpzLiBQbHVnaW5zIHRoYXQgaW50ZXJhY3Qgd2l0aCBwb3N0IGRhdGEsIGVzcGVjaWFsbHkgY3VzdG9tIHBvc3QgbWV0YSwgbmVlZCB0byBmb2xsb3cgY2VydGFpbiBwYXR0ZXJucyB0byBhdm9pZCBzeW5jIGlzc3VlczxyPlN5bmNpbmcgY3VzdG9tIHBvc3QgbWV0YSB2YWx1ZXM8SW4gYWRkaXRpb24gdG8gYmVpbmcgcmVnaXN0ZXJlZCwgY3VzdG9tIG1ldGEgZmllbGQgVUkgbXVzdCBiZSBjb25zdW1lZCBmcm9tIHRoZSBXb3JkUHJlc3MgZGF0YSBzdG9yZSBhbmQgcGFzc2VkIHRvIGNvbnRyb2xsZWQgaW5wdXQgY29tcG9uZW50cy48YnI+QWx3YXlzIGRlcml2ZSB0aGUgaW5wdXQgdmFsdWUgZGlyZWN0bHkgZnJvbSB0aGUgV29yZFByZXNzIGRhdGEgc3RvcmUgdmlhIHVzZVNlbGVjdC4gSW4gYWRkaXRpb24sIHVzZSB2YWx1ZSBpbnN0ZWFkIG9mIGRlZmF1bHRWYWx1ZSBvbiBpbnB1dCBjb21wb25lbnRzIHNvIHRoZSBpbnB1dCBhbHdheXMgcmVmbGVjdHMgdGhlIGN1cnJlbnQgZGF0YSBzdG9yZSBzdGF0ZS48PmNvbnRhVmFsdWUgPSB1c2VTZWxlY3Qoc2VsZWN0ID0gc2VsZWN0KCAnY29yZS9lZGl0b3InICkuZ2V0RWRpdGVkUG9zdEF0dHJpYnV0ZSggJ21ldGEnICk\/LmV4YW1wbGVfc3VidGl0bGUsW10pO3BhYSBhZyB7ZWRpdFBvc3QoIHsgbWV0YTogeyBleGFtcGxlX3N1YnRpdGxlOiBldmVudC50YXJnZXQudmFsdWUgfSB9ICk7fSB9LzwvcD4KPCEtLSAvd3A6IC0tPgoKPCEtLSB3cDphZyAtLT4KPHA+QXZvaWRpbmcgbG9jYWwgY29tcG9uZW50IHN0YXRlIGZvciBzaGFyZWQgZGF0YTxXaGVuIGJ1aWxkaW5nIGEgcGx1Z2luIFVJIHRoYXQgcmVhZHMgZnJvbSB0aGUgV29yZFByZXNzIGRhdGEgc3RvcmUsIGF2b2lkIGNvcHlpbmcgdGhhdCBkYXRhIGludG8gbG9jYWwgUmVhY3Qgc3RhdGUgd2l0aCB1c2VTdGF0ZS4gVGhpcyBhcHBsaWVzIHRvIGFueSBzaGFyZWQgZGF0YSwgc3VjaCBhcyBwb3N0IG1ldGEgb3IgYmxvY2sgYXR0cmlidXRlcy4gRG9pbmcgc28gZGlzY29ubmVjdHMgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgc2hhcmVkIGNvbGxhYm9yYXRpdmUgc3RhdGU6IHVwZGF0ZXMgZnJvbSBvdGhlciBjbGllbnRzIHdpbGwgdXBkYXRlIHRoZSBzdG9yZSwgYnV0IHlvdXIgY29tcG9uZW50IHdvbid0IHJlZmxlY3QgdGhlbSBhZnRlciB0aGUgaW5pdGlhbCByZW5kZXIsIGxlYWRpbmcgdG8gc3RhbGUgb3IgY29uZmxpY3RpbmcgZGF0YS48cj5CbG9ja3Mgd2l0aCBzaWRlIGVmZmVjdHMgb24gaW5zZXJ0aW9uPEN1c3RvbSBibG9ja3MgdGhhdCB0cmlnZ2VyIHNpZGUgZWZmZWN0cyBvbiBpbnNlcnRpb24gd2lsbCB0cmlnZ2VyIHRoYXQgc2lkZSBlZmZlY3QgZm9yIGFsbCBjb25uZWN0ZWQgY29sbGFib3JhdG9ycywgc2luY2UgYmxvY2sgY29udGVudCBzeW5jcyBpbW1lZGlhdGVseSB1cG9uIGluc2VydGlvbi48Rm9yIGV4YW1wbGUsIGluc3RlYWQgb2YgYXV0by1vcGVuaW5nIGEgbW9kYWwgd2hlbiBhIGJsb2NrIGlzIGluc2VydGVkLCBzaG93IGEgcGxhY2Vob2xkZXIgd2l0aCBhIGJ1dHRvbiB0aGF0IG9wZW5zIHRoZSBtb2RhbCBvbiBjbGljay4gVGhpcyBlbnN1cmVzIHNpZGUgZWZmZWN0cyBhcmUgaW50ZW50aW9uYWwgYW5kIGxvY2FsIHRvIHRoZSB1c2VyIHRha2luZyB0aGUgYWN0aW9uLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpwYXJhZyAtLT4KPHA+Q3JlZGl0czxQcm9wcyBocmlzemFyYXRlLCBAYWxlY2dlYXRjaGVzLCBAbWF4c2NobWVsaW5nLCBAcGF1bGtldmFuLCBhbmQgc2hla2hhcndhZ2ggZm9yIGJ1aWxkaW5nIHJlYWwtdGltZSBjb2xsYWJvcmF0aW9uIGluIHRoZSBibG9jayBlZGl0b3IgYWxvbmdzaWRlIEBpbmdlbml1bWVkLCBhbmQgZm9yIHRlY2huaWNhbCByZXZpZXcgYW5kIHByb29mcmVhZGluZyBvZiB0aGlzIGRldiBub3RlLjwvcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDphZyAtLT4KPHA+ZGV2LW5vdGVzLCAjZGV2LW5vdGVzLTctMDwvPgo8IS0tIC93cDphZyAtLT5kb2N1bWVudE1ldGFzYXZlZEF0ZG9jdW1lbnRNZXRhc2F2ZWRCeTxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLndvcmRwcmVzcy5vcmcvYmxvY2stZWRpdG9yL2hvdy10by1ndWlkZXMvbWV0YWJveC8iPjwvYT5jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NvcGFjaXR5dGFnTmFtZWNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudGRyb3BDYXBpbm5lckJsb2Nrc092ZXJ2aWV3bGV2ZWxsZXZlbDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLndvcmRwcmVzcy5vcmcvYmxvY2stZWRpdG9yL2hvdy10by1ndWlkZXMvbWV0YWJveC8iPjwvYT5zZXRvIC0tPgo8aHIgY2xzcz0idy1ibG9jay1zZXBhcmF0b3IgYXMtYWxwaGEtY2hhbm5lbC1vcGFjaXR5Ii8+CjwhLS0vd3A6c2VwYXJhdG9yIAohLS0gdzpoZWFkaW5nIC0tCjxoMiBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+L2gyPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpoZWFkaW5nIHsibGV2ZWwiOjN9IC0tPgo8aDMgY2xhc3M9IndwLWxvY2staGVhZGluZyIvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+PGNvZGU+PC9jb2RlPjxhIGhyZWY9Imh0dHM6Ly9kb2NzLnlqcy5kZXYvZWNvc3lzdGVtL2Nvbm5lY3Rpb24tcCI+cHJvdmlkZXI8L2E+PGNvZGU+PC9jb2RlPi9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtbG9jay1oZWFkaW5nIj48Yi9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD4vcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpjb2RlIHsibG51ZSI6cn0gLS0KPHByZSBsYXNzPSJ3cC1ibGNrLW5hZ2hsaWUtZSI+Y29ucy9wcmU+CjwhLS0gL3dwOmNvZGUgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+PGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y29kZT48L2NvZGU+PGNkZT5vPC9jb2RlPjxjZGU+bzwvY29kZT48Y29kZT48L2NvZGU+PGNvPmRlPC9jb2RlPjxjZGU+bzwvY29kZT48Y28+ZGU8L2NvZGU+PGRlPmNvPC9jb2RlPjxkZT5jbzwvY29kZT48Y29lPmQ8L2NvZGU+L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1sb2NrLWhlYWRpbmciPjxiL2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPjxjb2RlPjwvY29kZT4vcD4KPCEtLSAvd3A6cGFyYWdyYXBoIC0tPgoKPCEtLSB3cDpjb2RlIHsibG51ZSI6cn0gLS0KPHByZSBjbGFzcz0id3AtYmxvY2stbmFsZ2UtY2UiPmltKiogYGB9O30vcHJlPgo8IS0tIC93cDpjb2RlIC0tPgoKPCEtLSB3cDphZyAtLT4KPHA+PGxldmVsY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzb3JkZXJlZHZhbHVlc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFRoZSBzeW5jLnByb3ZpZGVycyBmaWx0ZXIgaXMgb25seSBhcHBsaWVkIHdoZW4gcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gaXMgZW5hYmxlZC5pbm5lckJsb2Nrc2NsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFJldHVybiBhbiBlbXB0eSBhcnJheSB0byBkaXNhYmxlIGNvbGxhYm9yYXRpb24gZW50aXJlbHkuaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRSZXR1cm4gYSBjdXN0b20gYXJyYXkgdG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBIVFRQIHBvbGxpbmcgcHJvdmlkZXIgd2l0aCB5b3VyIG93biB0cmFuc3BvcnQgKGUuZy4sIFdlYlNvY2tldHMsIFdlYlJUQykuaW5uZXJCbG9ja3M8Y29kZT48L2NvZGU+Y2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzb3BhY2l0eXRhZ05hbWVjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NsZXZlbGxldmVsU3luY2luZyBjdXN0b20gcG9zdCBtZXRhIHZhbHVlc2hlZGlueyJsZXZlbCI6M30gaDMgY2xhc3M9InctYmxvY2staGVhZGluZyIvaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOmxpc3QgLS0+Cjx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+PCEtLSB3cDpsaXN0LWl0ZW0gLS0+CjxsaT48Y29kZT48L2NvZGU+L2xpCjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+L2xpCjwhLS0gL3dwOmxpc3QtaXRlbSAtLT4KCjwhLS0gd3A6bGlzdC1pdGVtIC0tPgo8bGk+bGk+CjwhLS0gL3c6bGlzdC1pdGVtIC0tPC91bD5saXN0IC0tPgoKPCEtLSB3OnNlcHRvIC0tPgo8aHIgY2xzcz0idy1ibG9jay1zZXBhcmF0b3JoYXNhbHBoYWNoYW5uZWwtb3BhY2l0eSIvL3NldG8gLS0+Cgo8IS0tIHc6ZWFkaW5naDIgY2xhc3M9InctYmxvY2staGVhZGluZyIvaDI+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+L3A+CjwhLS0gL3dwOnBhYWdyYXBoIC0tCgo8IS0tIHdwOmhlYWRpbmcgeyJsZXZlbCI6M30gLS0+CjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+L2gzPgo8IS0tIC93cDpoZWFkaW5nIC0tPgoKPCEtLSB3cDpwYXJhZ3JhcGggLS0+CjxwPmNsaWVudElkaXNWYWxpZG5hbWVhdHRyaWJ1dGVzY29udGVudFdoZW4gcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gaXMgYWN0aXZlLCBhbGwgY29ubmVjdGVkIGVkaXRvcnMgc2hhcmUgdGhlIHNhbWUgdW5kZXJseWluZyBkYXRhIHN0YXRlIHZpYSBZanMuIFBsdWdpbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHBvc3QgZGF0YSwgZXNwZWNpYWxseSBjdXN0b20gcG9zdCBtZXRhLCBuZWVkIHRvIGZvbGxvdyBjZXJ0YWluIHBhdHRlcm5zIHRvIGF2b2lkIHN5bmMgaXNzdWVzZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50SW4gYWRkaXRpb24gdG8gYmVpbmcgcmVnaXN0ZXJlZCwgY3VzdG9tIG1ldGEgZmllbGQgVUkgbXVzdCBiZSBjb25zdW1lZCBmcm9tIHRoZSBXb3JkUHJlc3MgZGF0YSBzdG9yZSBhbmQgcGFzc2VkIHRvIGNvbnRyb2xsZWQgaW5wdXQgY29tcG9uZW50cy48YnI+QWx3YXlzIGRlcml2ZSB0aGUgaW5wdXQgdmFsdWUgZGlyZWN0bHkgZnJvbSB0aGUgV29yZFByZXNzIGRhdGEgc3RvcmUgdmlhIHVzZVNlbGVjdC4gSW4gYWRkaXRpb24sIHVzZSB2YWx1ZSBpbnN0ZWFkIG9mIGRlZmF1bHRWYWx1ZSBvbiBpbnB1dCBjb21wb25lbnRzIHNvIHRoZSBpbnB1dCBhbHdheXMgcmVmbGVjdHMgdGhlIGN1cnJlbnQgZGF0YSBzdG9yZSBzdGF0ZS5kcm9wQ2FwaW5uZXJCbG9ja3M8Y29kZT48L2NvZGU+PGNvZGU+PC9jb2RlPjxjbz5kZTwvY29kZT5jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NsZXZlbEF2b2lkaW5nIGxvY2FsIGNvbXBvbmVudCBzdGF0ZSBmb3Igc2hhcmVkIGRhdGFjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRXaGVuIGJ1aWxkaW5nIGEgcGx1Z2luIFVJIHRoYXQgcmVhZHMgZnJvbSB0aGUgV29yZFByZXNzIGRhdGEgc3RvcmUsIGF2b2lkIGNvcHlpbmcgdGhhdCBkYXRhIGludG8gbG9jYWwgUmVhY3Qgc3RhdGUgd2l0aCB1c2VTdGF0ZS4gVGhpcyBhcHBsaWVzIHRvIGFueSBzaGFyZWQgZGF0YSwgc3VjaCBhcyBwb3N0IG1ldGEgb3IgYmxvY2sgYXR0cmlidXRlcy4gRG9pbmcgc28gZGlzY29ubmVjdHMgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgc2hhcmVkIGNvbGxhYm9yYXRpdmUgc3RhdGU6IHVwZGF0ZXMgZnJvbSBvdGhlciBjbGllbnRzIHdpbGwgdXBkYXRlIHRoZSBzdG9yZSwgYnV0IHlvdXIgY29tcG9uZW50IHdvbid0IHJlZmxlY3QgdGhlbSBhZnRlciB0aGUgaW5pdGlhbCByZW5kZXIsIGxlYWRpbmcgdG8gc3RhbGUgb3IgY29uZmxpY3RpbmcgZGF0YS5kcm9wQ2FwaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NsZXZlbEJsb2NrcyB3aXRoIHNpZGUgZWZmZWN0cyBvbiBpbnNlcnRpb25jbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiBhdXRvLW9wZW5pbmcgYSBtb2RhbCB3aGVuIGEgYmxvY2sgaXMgaW5zZXJ0ZWQsIHNob3cgYSBwbGFjZWhvbGRlciB3aXRoIGEgYnV0dG9uIHRoYXQgb3BlbnMgdGhlIG1vZGFsIG9uIGNsaWNrLiBUaGlzIGVuc3VyZXMgc2lkZSBlZmZlY3RzIGFyZSBpbnRlbnRpb25hbCBhbmQgbG9jYWwgdG8gdGhlIHVzZXIgdGFraW5nIHRoZSBhY3Rpb24uZHJvcENhcGlubmVyQmxvY2tzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50ZHJvcENhcGlubmVyQmxvY2tzb3BhY2l0eXRhZ05hbWVjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRDdXN0b20gYmxvY2tzIHRoYXQgdHJpZ2dlciBzaWRlIGVmZmVjdHMgb24gaW5zZXJ0aW9uIHdpbGwgdHJpZ2dlciB0aGF0IHNpZGUgZWZmZWN0IGZvciBhbGwgY29ubmVjdGVkIGNvbGxhYm9yYXRvcnMsIHNpbmNlIGJsb2NrIGNvbnRlbnQgc3luY3MgaW1tZWRpYXRlbHkgdXBvbiBpbnNlcnRpb24uZHJvcENhcGlubmVyQmxvY2tzcnJyPGNvZGU+PC9jb2RlPjxjb2RlPjwvY29kZT48Y28+ZGU8L2NvZGU+L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6Y29kZSB7ImxudWUiOnJ9IC0tCjxwcmUgbGFzcz0id3AtYmxjay1haWxnZS1jZSI+Y29ucyBtZXQmbHQ7aW51dHZsdWU9eyBtZXRWYWx1ZXx8ICcnIH1vbkNobmU9e2V2ZW50ID0gcmVjb2RlaGVkaW57ImxldmVsIjozfSBoMyBjbGFzcz0idy1ibG9jay1oZWFkaW5nIi9oMz4KPCEtLSAvd3A6aGVhZGluZyAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD4vcD4KPCEtLSAvd3A6cGFhZ3JhcGggLS0KCjwhLS0gd3A6aGVhZGluZyB7ImxldmVsIjozfSAtLT4KPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj4vaDM+CjwhLS0gL3dwOmhlYWRpbmcgLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+L3A+CjwhLS0gL3dwOnBhcmFncmFwaCAtLT4KCjwhLS0gd3A6cGFyYWdyYXBoIC0tPgo8cD5zZXRvciAtLT4KPGhyIGNsYXNzPSJ3cC1ibG9jay1zZXBhcmF0b3IgaGFzLWFscGhhLWNoYW5uZWwtb3BhY2l0eSIvPgo8IS0tIC93cDpzZXBhcmF0b3IgLS0+Cgo8IS0tIHdwOmE8YSBlZj0iaHR0cHM6Ly9wcm9mbGUud29yZHByZXNzLm9yZy9jLyI+QGN6YXJhdGU8L2E+PGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL2FsZWNnZWF0Y2hlcy8iPjwvYT48YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvbWF4c2NobWVsaW5nLyI+PC9hPjxhIGhyZWY9Imh0dHBzOi8vcHJvZmlsZXMud29yZHByZXNzLm9yZy9wYXVsa2V2YW4vIj48L2E+PGEgaHJlZj0iaHR0cDovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvc24vIj5zaGVraGFyd2FnaDwvYT48YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvaW5nZW5pdW1lZC8iPjwvYT4jZHJvcENhcHByYXJhcGgjcHByYXJhcGhjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRUaGUgQHdvcmRwcmVzcy9zeW5jIHBhY2thZ2UgdXNlcyBhIHByb3ZpZGVyLWJhc2VkIGFyY2hpdGVjdHVyZSBmb3Igc3luY2luZyBjb2xsYWJvcmF0aXZlIGVkaXRpbmcgZGF0YS4gQnkgZGVmYXVsdCwgV29yZFByZXNzIHNoaXBzIHdpdGggYW4gSFRUUCBwb2xsaW5nIHByb3ZpZGVyLiBUaGUgc3luYy5wcm92aWRlcnMgZmlsdGVyIGFsbG93cyBwbHVnaW5zIHRvIHJlcGxhY2Ugb3IgZXh0ZW5kIHRoZSB0cmFuc3BvcnQgbGF5ZXIuIEZvciBleGFtcGxlLCBhIHBsdWdpbiBjb3VsZCBzd2l0Y2ggZnJvbSBIVFRQIHBvbGxpbmcgdG8gV2ViU29ja2V0cyBmb3IgbG93ZXItbGF0ZW5jeSBjb2xsYWJvcmF0aW9uLmRyb3BDYXBpbm5lckJsb2Nrczxjb2RlPjwvY29kZT48YSBocmVmPSJodHRzOi8vZG9jcy55anMuZGV2L2Vjb3N5c3RlbS9jb25uZWN0aW9uLXAiPnByb3ZpZGVyPC9hPjxjb2RlPjwvY29kZT5AJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0O3N0YXRldmVyc2lvbmF0cyBmIHRoaXMgd29yayBhcmUgZGVyaXZlZCBmcm9tIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSA8YSBocmVmPSJodHQ6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL2Rtb25hZC8iPkBkbW9uYWQ8L2E+aW48YSBocmVmPSJodHBzOi8vZ2l0aHViLmNtL1dvcmRQcmVzcy9ndXRlbmJlcmcvcHVsbC82ODQ4MyI+dGhpcyBQUjwvYT4sIGFuZCB1dGlsaXplcyBoaXMgWWpzIGxpYnJhcnkuPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHdwOnBhcmFncmFwaCAtLT4KPHA+UHJvcHMgdG9vcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnQmbmJzcDsmbmJzcDsmbmJzcDtzdGF0ZXZlcnNpb25zdGF0ZXZlcnNpb25vcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRvcmlnaW5hbENvbnRlbnRjbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRkcm9wQ2FwaW5uZXJCbG9ja3NvcmRlcmVkdmFsdWVzY2xpZW50SWRpc1ZhbGlkbmFtZWF0dHJpYnV0ZXNjb250ZW50b3cgbWV0YSBib3hlcyBhZmZlY3QgY29sbGFib3JhdGlvbiBtb2RlaW5uZXJCbG9ja3NjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRoZSBzeW5jLnByb3ZpZGVycyBmaWx0ZXIgZm9yIGN1c3RvbWl6ZWQgc3luYyB0cmFuc3BvcnRpbm5lckJsb2Nrc0hjbGllbnRJZGlzVmFsaWRuYW1lYXR0cmlidXRlc2NvbnRlbnRvbW1vbiBpc3N1ZXMgd2hlbiBidWlsZGluZyBwbHVnaW5zIHRoYXQgY2FuIHJ1biBpbiBhIGNvbGxhYm9yYXRpdmUgZW52aXJvbm1lbnRpbm5lckJsb2Nrc0NUY2xpZW50SWRpc1ZhbGlkb3JpZ2luYWxDb250ZW50bmFtZWF0dHJpYnV0ZXNjb250ZW50VGhpcyBkZXYgbm90ZSBjb3ZlcnMgdGhyZWUgaW1wb3J0YW50IGFzcGVjdHMgb2YgdGhlIGNvbGxhYm9yYXRpb24gc3lzdGVtIHRoYXQgcGx1Z2luIGFuZCB0aGVtZSBkZXZlbG9wZXJzIHNob3VsZCBiZSBhd2FyZSBvZjogZHJvcENhcGlubmVyQmxvY2tzPC9wPgo8IS0tIC93cDpwYXJhZ3JhcGggLS0+Cgo8IS0tIHd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1NmM2ODV3EzxwPkZvciBleGFtcGxlOjwvcD54dxZzeW50YXhoaWdobGlnaHRlci9jb2RleHcBMXh5eHcDcGhwd94BcmVnaXN0ZXJfcG9zdF9tZXRhKCAncG9zdCcsICdleGFtcGxlX3N1YnRpdGxlJywgWwogICdzaG93X2luX3Jlc3QnID0+IHRydWUsIC8vIFJlcXVpcmVkIGZvciBzeW5jaW5nLiAgJ3NpbmdsZScgPT4gdHJ1ZSwgICd0eXBlJyA9PiAnc3RyaW5nJywKICAncmV2aXNpb25zX2VuYWJsZWQnID0+IHRydWUsIC8vIFJlY29tbWVuZGVkIHRvIHRyYWNrIHZpYSByZXZpc2lvbiBoaXN0b3J5LgpdICk7eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9wYXJhZ3JhcGh5eHcMY29yZS9oZWFkaW5nfQN4dwxjb3JlL2hlYWRpbmd9A3cyPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj48YnI+SG93IGl0IHdvcmtzPC9oMz53PDxwPlRoZSBmaWx0ZXIgaXMgYXBwbGllZCBkdXJpbmcgcHJvdmlkZXIgaW5pdGlhbGl6YXRpb246PC9wPnemBDxwPkEgcHJvdmlkZXIgY3JlYXRvciBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIDxjb2RlPlByb3ZpZGVyQ3JlYXRvck9wdGlvbnM8L2NvZGU+IG9iamVjdCAoY29udGFpbmluZyB0aGUgWWpzIDxjb2RlPnlkb2M8L2NvZGU+LCA8Y29kZT5hd2FyZW5lc3M8L2NvZGU+LCA8Y29kZT5vYmplY3RUeXBlPC9jb2RlPiwgYW5kIDxjb2RlPm9iamVjdElkPC9jb2RlPikgYW5kIHJldHVybnMgYSA8Y29kZT5Qcm92aWRlckNyZWF0b3JSZXN1bHQ8L2NvZGU+IHdpdGggPGNvZGU+ZGVzdHJveTwvY29kZT4gYW5kIDxjb2RlPm9uPC9jb2RlPiBtZXRob2RzLiBUaGUgPGNvZGU+ZGVzdHJveTwvY29kZT4gbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwcm92aWRlciBpcyBubyBsb25nZXIgbmVlZGVkLCBhbmQgdGhlIG9uIG1ldGhvZCBhbGxvd3MgdGhlIGVkaXRvciB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb24gc3RhdHVzIGV2ZW50cyAoPGNvZGU+Y29ubmVjdGluZzwvY29kZT4sIDxjb2RlPmNvbm5lY3RlZDwvY29kZT4sIDxjb2RlPmRpc2Nvbm5lY3RlZDwvY29kZT4pLjwvcD53QTxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+PGJyPkV4YW1wbGU6IFdlYlNvY2tldCBwcm92aWRlcjwvaDM+d5QBPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHJlcGxhY2VzIHRoZSBkZWZhdWx0IEhUVFAgcG9sbGluZyBwcm92aWRlciB3aXRoIGEgV2ViU29ja2V0LWJhc2VkIHRyYW5zcG9ydCB1c2luZyB0aGUgPGNvZGU+eS13ZWJzb2NrZXQ8L2NvZGU+IGxpYnJhcnk6PC9wPnh3FnN5bnRheGhpZ2hsaWdodGVyL2NvZGV4dwExeHl4dwdqc2NyaXB0d35jb25zdCBmaWx0ZXJlZFByb3ZpZGVyQ3JlYXRvcnMgPSBhcHBseUZpbHRlcnMoCidzeW5jLnByb3ZpZGVycycsCmdldERlZmF1bHRQcm92aWRlckNyZWF0b3JzKCkgLy8gYXJyYXkgb2YgcHJvdmlkZXIgY3JlYXRvcnMKKTt4dxZzeW50YXhoaWdobGlnaHRlci9jb2RleHcBMXh5eHcHanNjcmlwdHftBWltcG9ydCB7IGFkZEZpbHRlciB9IGZyb20gJ0B3b3JkcHJlc3MvaG9va3MnOwppbXBvcnQgeyBXZWJzb2NrZXRQcm92aWRlciB9IGZyb20gJ3ktd2Vic29ja2V0JzsKCi8qKgogKiBDcmVhdGUgYSBXZWJTb2NrZXQgcHJvdmlkZXIgdGhhdCBjb25uZWN0cyBhIFlqcyBkb2N1bWVudAogKiB0byBhIFdlYlNvY2tldCBzZXJ2ZXIgZm9yIHJlYWwtdGltZSBzeW5jaW5nLgogKi8KZnVuY3Rpb24gY3JlYXRlV2ViU29ja2V0UHJvdmlkZXIoIHsgYXdhcmVuZXNzLCBvYmplY3RUeXBlLCBvYmplY3RJZCwgeWRvYyB9ICkgewoJY29uc3Qgcm9vbU5hbWUgPSBgJHsgb2JqZWN0VHlwZSB9LSR7IG9iamVjdElkID8\/ICdjb2xsZWN0aW9uJyB9YDsKCWNvbnN0IHNlcnZlclVybCA9ICd3c3M6Ly9leGFtcGxlLmNvbS8nOwoKCWNvbnN0IHByb3ZpZGVyID0gbmV3IFdlYnNvY2tldFByb3ZpZGVyKAoJCXNlcnZlclVybCwKCQlyb29tTmFtZSwKCQl5ZG9jLAoJCXsgYXdhcmVuZXNzIH0KCSk7CgoJcmV0dXJuIHsKCQlkZXN0cm95OiAoKSA9PiB7CgkJCXByb3ZpZGVyLmRlc3Ryb3koKTsKCQl9LAoJCW9uOiAoIGV2ZW50TmFtZSwgY2FsbGJhY2sgKSA9PiB7CgkJCXByb3ZpZGVyLm9uKCBldmVudE5hbWUsIGNhbGxiYWNrICk7CgkJfSwKCX07Cn0KCmFkZEZpbHRlciggJ3N5bmMucHJvdmlkZXJzJywgJ215LXBsdWdpbi93ZWJzb2NrZXQtcHJvdmlkZXInLCAoKSA9PiB7CglyZXR1cm4gWyBjcmVhdGVXZWJTb2NrZXRQcm92aWRlciBdOwp9ICk7eHcWc3ludGF4aGlnaGxpZ2h0ZXIvY29kZXh3ATF4eXh3B2pzY3JpcHR3\/gFjb25zdCBtZXRhVmFsdWUgPSB1c2VTZWxlY3QoCglzZWxlY3QgPT4gc2VsZWN0KCAnY29yZS9lZGl0b3InICkuZ2V0RWRpdGVkUG9zdEF0dHJpYnV0ZSggJ21ldGEnICk\/LmV4YW1wbGVfc3VidGl0bGUsCglbXQopOwoKPGlucHV0Cgl2YWx1ZT17IG1ldGFWYWx1ZSB8fCAnJyB9CglvbkNoYW5nZT17IGV2ZW50ID0+IHsKCQllZGl0UG9zdCggeyBtZXRhOiB7IGV4YW1wbGVfc3VidGl0bGU6IGV2ZW50LnRhcmdldC52YWx1ZSB9IH0gKTsKCX0gfQovPgEAgAEAdyRlZTIwNWYxZS03NzUxLTQ3ODgtYmRkZi02NDEzMmRiNTE0YWZ3nQI8cHJlIGNsYXNzPSJ3cC1ibG9jay1zeW50YXhoaWdobGlnaHRlci1jb2RlIj5yZWdpc3Rlcl9wb3N0X21ldGEoICdwb3N0JywgJ2V4YW1wbGVfc3VidGl0bGUnLCBbCiAgJ3Nob3dfaW5fcmVzdCcgPSZndDsgdHJ1ZSwgLy8gUmVxdWlyZWQgZm9yIHN5bmNpbmcuICAnc2luZ2xlJyA9Jmd0OyB0cnVlLCAgJ3R5cGUnID0mZ3Q7ICdzdHJpbmcnLAogICdyZXZpc2lvbnNfZW5hYmxlZCcgPSZndDsgdHJ1ZSwgLy8gUmVjb21tZW5kZWQgdG8gdHJhY2sgdmlhIHJldmlzaW9uIGhpc3RvcnkuCl0gKTs8L3ByZT53JDBjMzY4OTFjLTA4YzctNDg0NS04MTdmLWNkOTYxZDIyMGUwNHckZDY4N2M3NmQtMDUyNy00NjU3LWIyM2ItMGM4ODcwMjAzM2U4dyQ0Y2Q0NmQzNS0xYmYyLTQ5ZGItOTJjYS05NjkyY2U2MjVjMzN3JGUzMjIwNTk3LTA5N2QtNDA0Ny05ZGZkLTNiZDI2MDE0YTM2ZHckMTgyYmZjM2EtYTEyMC00YjFjLTkwNTYtZWQ0YTlmMWQwYzQxdyQ2ZDUzZGRmNC1iNmI4LTRjZmYtOTNmYi1mZTk4YzIyNjMzZWZ3JGVkYTY5OWE1LTNmYTItNDU4Ni1iZDFkLWE0ODc0YTYyM2Q5NHckYmUwYTlhMjItNTVjNi00NDJkLWE2YmYtNzJmMDEwOGUyZGI2d7EBPHByZSBjbGFzcz0id3AtYmxvY2stc3ludGF4aGlnaGxpZ2h0ZXItY29kZSI+Y29uc3QgZmlsdGVyZWRQcm92aWRlckNyZWF0b3JzID0gYXBwbHlGaWx0ZXJzKAonc3luYy5wcm92aWRlcnMnLApnZXREZWZhdWx0UHJvdmlkZXJDcmVhdG9ycygpIC8vIGFycmF5IG9mIHByb3ZpZGVyIGNyZWF0b3JzCik7PC9wcmU+dyQyMDM2YTNlNC0xNzhkLTQ0NDgtOGEyMi03OTlkODg0ZWEzZmR3JDY2NTgwZWNhLWU0MTYtNDIxMi05ZWI5LTAyMjI3YjQ0NzhkYnckYWIyYzVlODgtYWQyZi00MDE0LWJmNzEtZmMyY2E2NzA2YzA1dyQ0MTg4ZjJiZC1jMzYzLTRmN2EtOTE4Ni0xNmU2M2M4MDE1NDV3qQY8cHJlIGNsYXNzPSJ3cC1ibG9jay1zeW50YXhoaWdobGlnaHRlci1jb2RlIj5pbXBvcnQgeyBhZGRGaWx0ZXIgfSBmcm9tICdAd29yZHByZXNzL2hvb2tzJzsKaW1wb3J0IHsgV2Vic29ja2V0UHJvdmlkZXIgfSBmcm9tICd5LXdlYnNvY2tldCc7CgovKioKICogQ3JlYXRlIGEgV2ViU29ja2V0IHByb3ZpZGVyIHRoYXQgY29ubmVjdHMgYSBZanMgZG9jdW1lbnQKICogdG8gYSBXZWJTb2NrZXQgc2VydmVyIGZvciByZWFsLXRpbWUgc3luY2luZy4KICovCmZ1bmN0aW9uIGNyZWF0ZVdlYlNvY2tldFByb3ZpZGVyKCB7IGF3YXJlbmVzcywgb2JqZWN0VHlwZSwgb2JqZWN0SWQsIHlkb2MgfSApIHsKCWNvbnN0IHJvb21OYW1lID0gYCR7IG9iamVjdFR5cGUgfS0keyBvYmplY3RJZCA\/PyAnY29sbGVjdGlvbicgfWA7Cgljb25zdCBzZXJ2ZXJVcmwgPSAnd3NzOi8vZXhhbXBsZS5jb20vJzsKCgljb25zdCBwcm92aWRlciA9IG5ldyBXZWJzb2NrZXRQcm92aWRlcigKCQlzZXJ2ZXJVcmwsCgkJcm9vbU5hbWUsCgkJeWRvYywKCQl7IGF3YXJlbmVzcyB9CgkpOwoKCXJldHVybiB7CgkJZGVzdHJveTogKCkgPSZndDsgewoJCQlwcm92aWRlci5kZXN0cm95KCk7CgkJfSwKCQlvbjogKCBldmVudE5hbWUsIGNhbGxiYWNrICkgPSZndDsgewoJCQlwcm92aWRlci5vbiggZXZlbnROYW1lLCBjYWxsYmFjayApOwoJCX0sCgl9Owp9CgphZGRGaWx0ZXIoICdzeW5jLnByb3ZpZGVycycsICdteS1wbHVnaW4vd2Vic29ja2V0LXByb3ZpZGVyJywgKCkgPSZndDsgewoJcmV0dXJuIFsgY3JlYXRlV2ViU29ja2V0UHJvdmlkZXIgXTsKfSApOzwvcHJlPnckYWU1N2MyYjgtNWQ3ZC00NmNiLTg3NDAtYmNjZTZmMzQzOTM5dyQ5NDEyNTRjMS1iYWQyLTQ2N2YtYTY0NC1kOTc5YzRmNmQyOWJ3JDRkMTFjY2NkLTBmNjYtNGM4OC1iN2Y5LTgzNDY4NzNkNjY0NnckNmUyZTQ1YzUtZTU1NS00MTMxLWJmNmMtOGRhMzEyY2ZhNjg4dyRjMGJlNWY2Yi1kNTk3LTRmMTUtOGU5MS04MzRiY2ZkMGJiOTh3JGRhMTc1NjQzLTFlNDEtNGQ4OS04ODc3LWRmZWU2ZTg3MDQwNXckZGY2NTg0MmUtZTIxNC00ZmNkLWIzZjctYjc3YTJkNThmODhhdyQ2ZjAwMGJlYi0zZTNkLTQ4Y2YtYjliZS02NDRmYzRhY2Y2MjV3vQI8cHJlIGNsYXNzPSJ3cC1ibG9jay1zeW50YXhoaWdobGlnaHRlci1jb2RlIj5jb25zdCBtZXRhVmFsdWUgPSB1c2VTZWxlY3QoCglzZWxlY3QgPSZndDsgc2VsZWN0KCAnY29yZS9lZGl0b3InICkuZ2V0RWRpdGVkUG9zdEF0dHJpYnV0ZSggJ21ldGEnICk\/LmV4YW1wbGVfc3VidGl0bGUsCglbXQopOwoKJmx0O2lucHV0Cgl2YWx1ZT17IG1ldGFWYWx1ZSB8fCAnJyB9CglvbkNoYW5nZT17IGV2ZW50ID0mZ3Q7IHsKCQllZGl0UG9zdCggeyBtZXRhOiB7IGV4YW1wbGVfc3VidGl0bGU6IGV2ZW50LnRhcmdldC52YWx1ZSB9IH0gKTsKCX0gfQovJmd0OzwvcHJlPntCec13Wc7AAHtB4v0bgKAAAHffAXJlZ2lzdGVyX3Bvc3RfbWV0YSggJ3Bvc3QnLCAnZXhhbXBsZV9zdWJ0aXRsZScsIFsKICAnc2hvd19pbl9yZXN0JyA9PiB0cnVlLCAvLyBSZXF1aXJlZCBmb3Igc3luY2luZy4gIAonc2luZ2xlJyA9PiB0cnVlLCAgJ3R5cGUnID0+ICdzdHJpbmcnLAogICdyZXZpc2lvbnNfZW5hYmxlZCcgPT4gdHJ1ZSwgLy8gUmVjb21tZW5kZWQgdG8gdHJhY2sgdmlhIHJldmlzaW9uIGhpc3RvcnkuCl0gKTt34AFyZWdpc3Rlcl9wb3N0X21ldGEoICdwb3N0JywgJ2V4YW1wbGVfc3VidGl0bGUnLCBbCgknc2hvd19pbl9yZXN0JyA9PiB0cnVlLCAvLyBSZXF1aXJlZCBmb3Igc3luY2luZy4gIAoJJ3NpbmdsZScgPT4gdHJ1ZSwgIAoJJ3R5cGUnID0+ICdzdHJpbmcnLAoJJ3JldmlzaW9uc19lbmFibGVkJyA9PiB0cnVlLCAvLyBSZWNvbW1lbmRlZCB0byB0cmFjayB2aWEgcmV2aXNpb24gaGlzdG9yeS4KXSApOwEAAQAJAHUDfaxYfaMWfYpbdyRhZWJhNDMwYi1kOGIwLTQyMWMtOGIxZC03MDJiYzRlMzIyNDF37AE8cD5QYXJ0cyBvZiB0aGlzIHdvcmsgYXJlIGRlcml2ZWQgZnJvbSBjb250cmlidXRpb25zIG1hZGUgYnkgPGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL2Rtb25hZC8iPkBkbW9uYWQ8L2E+IGluJm5ic3A7PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1dvcmRQcmVzcy9ndXRlbmJlcmcvcHVsbC82ODQ4MyI+dGhpcyBQUjwvYT4sIGFuZCB1dGlsaXplcyBoaXMgWWpzIGxpYnJhcnkuPC9wPnckZjExMTliYzAtMzJmZC00OWNmLWE0Y2ItZGI2MjBjM2Y1NDRmd7sBPHA+UHJvcHMgdG8mbmJzcDs8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvd2lsZHdvcmtzLyI+QHdpbGR3b3JrczwvYT4gYW5kIDxhIGhyZWY9Imh0dHBzOi8vcHJvZmlsZXMud29yZHByZXNzLm9yZy90eXhsYS8iPkB0eXhsYTwvYT4mbmJzcDtmb3IgcHJvb2ZyZWFkaW5nIHRoaXMgZGV2IG5vdGUuPC9wPnckM2Q5MGRiY2YtY2ViZC00NmVmLWE3MzktY2RmMjA1NjFiNmI3dyc8cD4jZGV2LW5vdGVzLCAjZGV2LW5vdGVzLTctMCwgIzctMDwvcD6aAQB3BmNsb3NlZHeFATxwPlRoaXMgZGV2IG5vdGUgY292ZXJzIHRocmVlIGltcG9ydGFudCBhc3BlY3RzIG9mIHRoZSBjb2xsYWJvcmF0aW9uIHN5c3RlbSB0aGF0IHBsdWdpbiBhbmQgdGhlbWUgZGV2ZWxvcGVycyBzaG91bGQgYmUgYXdhcmUgb2Y6IDwvcD53Izx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvdWw+dyQ2NTQ3YTBhZS0wMjE5LTQ0ZGQtOGQxYS0xMWYxYTE4ZTEwNzF3MTxsaT5Ib3cgbWV0YSBib3hlcyBhZmZlY3QgY29sbGFib3JhdGlvbiBtb2RlPC9saT53JDE3ZDBkMzcyLTE5ZWUtNGRkYS1hNTJjLTg3ZDM0MzJiZjUzY3dAPGxpPlRoZSBzeW5jLnByb3ZpZGVycyBmaWx0ZXIgZm9yIGN1c3RvbWl6ZWQgc3luYyB0cmFuc3BvcnQ8L2xpPnckYjg3OTljMjktOWNhNi00MzhmLWI2NTQtYTczYmNjNmNkYzc0d1g8bGk+Q29tbW9uIGlzc3VlcyB3aGVuIGJ1aWxkaW5nIHBsdWdpbnMgdGhhdCBjYW4gcnVuIGluIGEgY29sbGFib3JhdGl2ZSBlbnZpcm9ubWVudDwvbGk+eHcOY29yZS9wYXJhZ3JhcGh5dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DmNvcmUvcGFyYWdyYXBoeRgAdwdwdWJsaXNodxMyMDI2LTAzLTEwVDAzOjI2OjE4dytyZWFsLXRpbWUtY29sbGFib3JhdGlvbi1pbi10aGUtYmxvY2stZWRpdG9yeAEAAQABAPcMAH2g0uoTfQB3BG9wZW55dwB3CHN0YW5kYXJkdwB3AHl5dwB5fQB5eXcAdwB4dgIYaW1hZ2VfZ2VuZXJhdG9yX3NldHRpbmdzdgQIdGVtcGxhdGV3B2hpZ2h3YXkQZGVmYXVsdF9pbWFnZV9pZH0ABGZvbnR3AAdlbmFibGVkeQd2ZXJzaW9ufQJ4dw5jb3JlL3BhcmFncmFwaHl4eHh4eHh4eHcOY29yZS9zZXBhcmF0b3J3DWFscGhhLWNoYW5uZWx3Amhydwxjb3JlL2hlYWRpbmd4fQJ3DGNvcmUvaGVhZGluZ30DeHcOY29yZS9wYXJhZ3JhcGh5eHcKY29yZS9pbWFnZX2e8Q53W2h0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvZmlsZXMvMjAyNi8wMy9DbGVhblNob3QtMjAyNi0wMy0wNC1hdC0xNC4yNy4zMC0xMDI0eDY2MC5wbmd3Umh0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvZmlsZXMvMjAyNi8wMy9DbGVhblNob3QtMjAyNi0wMy0wNC1hdC0xNC4yNy4zMC5wbmd3BWxhcmdldwVtZWRpYXh3CmNvcmUvaW1hZ2V9n\/EOd1todHRwczovL21ha2Uud29yZHByZXNzLm9yZy9jb3JlL2ZpbGVzLzIwMjYvMDMvQ2xlYW5TaG90LTIwMjYtMDMtMDQtYXQtMTQuMjguMzItMTAyNHg2NTUucG5nd1JodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9jb3JlL2ZpbGVzLzIwMjYvMDMvQ2xlYW5TaG90LTIwMjYtMDMtMDQtYXQtMTQuMjguMzIucG5ndwVsYXJnZXcFbWVkaWF3MExvY2tlZCBwb3N0IG1vZGFsIHdoZW4gc29tZW9uZSB0YWtlcyBvdmVyIGEgcG9zdHcxTG9ja2VkIHBvc3QgbW9kYWwgd2hlbiB0cnlpbmcgdG8gdGFrZSBvdmVyIGEgcG9zdHcMY29yZS9oZWFkaW5nfQN4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl1AX2XEnh3DmNvcmUvc2VwYXJhdG9ydw1hbHBoYS1jaGFubmVsdwJocnh3DGNvcmUvaGVhZGluZ30Cdwxjb3JlL2hlYWRpbmd9A3cMY29yZS9oZWFkaW5nfQN4dwljb3JlL2xpc3R5dwB4dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL3NlcGFyYXRvcncNYWxwaGEtY2hhbm5lbHcCaHJ4dwxjb3JlL2hlYWRpbmd9AncMY29yZS9oZWFkaW5nfQN4dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHl4dwxjb3JlL2hlYWRpbmd9A3h3DmNvcmUvcGFyYWdyYXBoeXh3DGNvcmUvaGVhZGluZ30DeHcOY29yZS9wYXJhZ3JhcGh5eHcOY29yZS9zZXBhcmF0b3J3DWFscGhhLWNoYW5uZWx3AmhyeHcOY29yZS9wYXJhZ3JhcGh5dw5jb3JlL3BhcmFncmFwaHl4dw5jb3JlL3BhcmFncmFwaHk2AHckOGM0MjYzODEtNmViNy00MmUyLWIyMDUtMDYwMjhiZDNmNTlld54BPHA+UmVhbC10aW1lIGNvbGxhYm9yYXRpb24gKFJUQykgaW4gdGhlIGJsb2NrIGVkaXRvciBhbGxvd3MgbXVsdGlwbGUgdXNlcnMgdG8gZWRpdCBjb250ZW50IHNpbXVsdGFuZW91c2x5IGJ5IHV0aWxpemluZyA8YSBocmVmPSJodHRwczovL3lqcy5kZXYvIj5ZanM8L2E+LjwvcD53JGYzNzk5MzEyLTRmOGEtNDFmMi04Mzc0LTdjYjhjYTQ0OTAzZXckMjU2OWE5YjYtMThhYy00MTk5LWEzNGMtYWM5ZDc3ZTQ3ZTA1dyRiYTUzMzFmZC1lMzVjLTQ5MWEtYjI2NC1lZjU1YTEwNGQwM2Z3JDc4MzY3ZjFjLTRlNmYtNGVjYi04YTA3LTE1OTMxYWQ1OTMzNnckYjI1ODU2YzgtMmFjMS00ODU2LWIzZTEtMjgxN2M0NmQwNzkxdyQyZmFlOTJlYS1hYjdhLTRkOWUtYjYzNC00MWRjMGEyNDkyYmZ3JDkzYjM3NDZkLTY1NTgtNDU1My05OTU0LTg1MWI1OTJiNDk5MHckNGEwODk0ZmQtMzA5NC00ZTBlLTg1MGQtZDA0MTM3MDM2NjM1dyQ0ZTdmOGNlZS0wZTUzLTQ1NTQtYWM2OS0wYWVlN2EzZDM1YjV3JDA1ZDdiNmYzLTcyMTEtNDMyOC1hYjRkLTUyNDVkYTMzMzA1ZHckMWIwNzQyYzgtOGI5OS00ODZjLWI3NjItMGUxYjE5ZTRjMjYydyRjMTFlOGFkOS00ZjAwLTQ5ZjQtYWI0Zi04ODVmNTNlNjlmZjR3JGM1NmE2ODljLWVmMzUtNDMyYy04YmYxLWIzMjc4NTE1NTBiZnckYTQxNzQ2MDAtYTlkNS00ZmI3LWFiYzktMzcwNGRlM2RlMjZmdyQxOWJlZDVhYy0wYjVhLTQ2ZWUtODhmNi03N2NjMjkzZDEyYjd3JDJkMjQ3N2NkLWJkMGItNDg2Ny1iOGU0LTliZDAwZTdjYTc4MHckYmNlNGY2ZTQtOTMzNy00MzIxLWI5ZjQtYWJmNjkzNjlkMTlhdyk8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkNyZWRpdHM8L2gzPnckZjJiZjgxYjctYjdiOS00NTNhLTljMWEtN2JiMWE1NjAyMzQ5d7UEPHA+UHJvcHMgPGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL2N6YXJhdGUvIj5AY3phcmF0ZTwvYT4sIDxhIGhyZWY9Imh0dHBzOi8vcHJvZmlsZXMud29yZHByZXNzLm9yZy9hbGVjZ2VhdGNoZXMvIj5AYWxlY2dlYXRjaGVzLDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL21heHNjaG1lbGluZy8iPkBtYXhzY2htZWxpbmc8L2E+LCA8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvcGF1bGtldmFuLyI+QHBhdWxrZXZhbjwvYT4sIGFuZCA8YSBocmVmPSJodHRwczovL3Byb2ZpbGVzLndvcmRwcmVzcy5vcmcvc2hla2hhcm53YWdoLyI+QHNoZWtoYXJ3YWdoPC9hPiBmb3IgYnVpbGRpbmcgcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gaW4gdGhlIGJsb2NrIGVkaXRvciBhbG9uZ3NpZGUgPGEgaHJlZj0iaHR0cHM6Ly9wcm9maWxlcy53b3JkcHJlc3Mub3JnL2luZ2VuaXVtZWQvIj5AaW5nZW5pdW1lZDwvYT4sIGFuZCBmb3IgdGVjaG5pY2FsIHJldmlldyBhbmQgcHJvb2ZyZWFkaW5nIG9mIHRoaXMgZGV2IG5vdGUuPC9wPgQAowEAdzs8aHIgY2xhc3M9IndwLWJsb2NrLXNlcGFyYXRvciBoYXMtYWxwaGEtY2hhbm5lbC1vcGFjaXR5IiAvPndXPGgyIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Db2xsYWJvcmF0aW9uIGlzIGRpc2FibGVkIHdoZW4gbWV0YSBib3hlcyBhcmUgcHJlc2VudDwvaDI+dy08aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlRoZSBQcm9ibGVtPC9oMz53rwE8cD5DbGFzc2ljIFdvcmRQcmVzcyBtZXRhIGJveGVzIGFyZSBub3Qgc3luY2VkIGJ5IHRoZSByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBzeXN0ZW0uIFRvIGF2b2lkIGRhdGEgbG9zcywgY29sbGFib3JhdGlvbiBpcyBkaXNhYmxlZCB3aGVuIG1ldGEgYm94ZXMgYXJlIGRldGVjdGVkIG9uIGEgcG9zdC48L3A+d8wCPGZpZ3VyZSBjbGFzcz0id3AtYmxvY2staW1hZ2Ugc2l6ZS1sYXJnZSI+PGEgaHJlZj0iaHR0cHM6Ly9tYWtlLndvcmRwcmVzcy5vcmcvY29yZS9maWxlcy8yMDI2LzAzL0NsZWFuU2hvdC0yMDI2LTAzLTA0LWF0LTE0LjI3LjMwLnBuZyI+PGltZyBzcmM9Imh0dHBzOi8vbWFrZS53b3JkcHJlc3Mub3JnL2NvcmUvZmlsZXMvMjAyNi8wMy9DbGVhblNob3QtMjAyNi0wMy0wNC1hdC0xNC4yNy4zMC0xMDI0eDY2MC5wbmciIGFsdD0iTG9ja2VkIHBvc3QgbW9kYWwgd2hlbiBzb21lb25lIHRha2VzIG92ZXIgYSBwb3N0IiBjbGFzcz0id3AtaW1hZ2UtMTIxOTUwIiAvPjwvYT48L2ZpZ3VyZT53zQI8ZmlndXJlIGNsYXNzPSJ3cC1ibG9jay1pbWFnZSBzaXplLWxhcmdlIj48YSBocmVmPSJodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9jb3JlL2ZpbGVzLzIwMjYvMDMvQ2xlYW5TaG90LTIwMjYtMDMtMDQtYXQtMTQuMjguMzIucG5nIj48aW1nIHNyYz0iaHR0cHM6Ly9tYWtlLndvcmRwcmVzcy5vcmcvY29yZS9maWxlcy8yMDI2LzAzL0NsZWFuU2hvdC0yMDI2LTAzLTA0LWF0LTE0LjI4LjMyLTEwMjR4NjU1LnBuZyIgYWx0PSJMb2NrZWQgcG9zdCBtb2RhbCB3aGVuIHRyeWluZyB0byB0YWtlIG92ZXIgYSBwb3N0IiBjbGFzcz0id3AtaW1hZ2UtMTIxOTUxIiAvPjwvYT48L2ZpZ3VyZT53PjxoMyBjbGFzcz0id3AtYmxvY2staGVhZGluZyI+V2hhdCBkZXZlbG9wZXJzIG5lZWQgdG8ga25vdzwvaDM+d\/QBPHA+VG8gYWxsb3cgY29sbGFib3JhdGlvbiwgY29uc2lkZXIgbWlncmF0aW5nIG1ldGEgYm94IGZ1bmN0aW9uYWxpdHkgdG8gcmVnaXN0ZXJlZCBwb3N0IG1ldGEgd2l0aCA8Y29kZT5zaG93X2luX3Jlc3Q8L2NvZGU+IHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiwgYW5kIHVzZSBzaWRlYmFyIHBsdWdpbnMgb3IgYmxvY2stYmFzZWQgYWx0ZXJuYXRpdmVzIHRoYXQgcmVhZCBmcm9tIFdvcmRQcmVzcyBkYXRhIHN0b3Jlcy4gPC9wPne+ATxwPkZvciBtb3JlIGRldGFpbHMgb24gbWlncmF0aW5nIGZyb20gbWV0YSBib3hlcywgc2VlIHRoZSA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci53b3JkcHJlc3Mub3JnL2Jsb2NrLWVkaXRvci9ob3ctdG8tZ3VpZGVzL21ldGFib3gvIj5NZXRhIEJveGVzIGd1aWRlPC9hPiBpbiB0aGUgQmxvY2sgRWRpdG9yIEhhbmRib29rLjwvcD53OzxociBjbGFzcz0id3AtYmxvY2stc2VwYXJhdG9yIGhhcy1hbHBoYS1jaGFubmVsLW9wYWNpdHkiIC8+d2E8aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlRoZSBzeW5jLnByb3ZpZGVycyBmaWx0ZXI6IEN1c3RvbWl6aW5nIHRoZSBzeW5jIHRyYW5zcG9ydCBsYXllcjwvaDI+dyo8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPk92ZXJ2aWV3PC9oMz53ugM8cD5UaGUgPGNvZGU+QHdvcmRwcmVzcy9zeW5jPC9jb2RlPiBwYWNrYWdlIHVzZXMgYSA8YSBocmVmPSJodHRwczovL2RvY3MueWpzLmRldi9lY29zeXN0ZW0vY29ubmVjdGlvbi1wcm92aWRlciI+cHJvdmlkZXItYmFzZWQgYXJjaGl0ZWN0dXJlPC9hPiBmb3Igc3luY2luZyBjb2xsYWJvcmF0aXZlIGVkaXRpbmcgZGF0YS4gQnkgZGVmYXVsdCwgV29yZFByZXNzIHNoaXBzIHdpdGggYW4gSFRUUCBwb2xsaW5nIHByb3ZpZGVyLiBUaGUgPGNvZGU+c3luYy5wcm92aWRlcnM8L2NvZGU+IGZpbHRlciBhbGxvd3MgcGx1Z2lucyB0byByZXBsYWNlIG9yIGV4dGVuZCB0aGUgdHJhbnNwb3J0IGxheWVyLiBGb3IgZXhhbXBsZSwgYSBwbHVnaW4gY291bGQgc3dpdGNoIGZyb20gSFRUUCBwb2xsaW5nIHRvIFdlYlNvY2tldHMgZm9yIGxvd2VyLWxhdGVuY3kgY29sbGFib3JhdGlvbi48L3A+d0I8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPjxicj5XaGF0IGRldmVsb3BlcnMgbmVlZCB0byBrbm93PC9oMz53Izx1bCBjbGFzcz0id3AtYmxvY2stbGlzdCI+CgoKCjwvdWw+dyQ0YjQ3MDdmZi1hZjM5LTRjYzUtOTc1Yi1mNmRjMmMzMTM2NTJ3aDxsaT5UaGUgPGNvZGU+c3luYy5wcm92aWRlcnM8L2NvZGU+IGZpbHRlciBpcyBvbmx5IGFwcGxpZWQgd2hlbiByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLjwvbGk+dyRhMjNhMGEzYi1jYmExLTQ2NDMtODcxYS05YjRmNzhjNDMwMTJ3QTxsaT5SZXR1cm4gYW4gZW1wdHkgYXJyYXkgdG8gZGlzYWJsZSBjb2xsYWJvcmF0aW9uIGVudGlyZWx5LjwvbGk+dyQyNjRmYzRiNi02MTliLTRmODQtOWQyYi1lZWQ3YTM3MGI3YzJ3fzxsaT5SZXR1cm4gYSBjdXN0b20gYXJyYXkgdG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBIVFRQIHBvbGxpbmcgcHJvdmlkZXIgd2l0aCB5b3VyIG93biB0cmFuc3BvcnQgKGUuZy4sIFdlYlNvY2tldHMsIFdlYlJUQykuPC9saT53OzxociBjbGFzcz0id3AtYmxvY2stc2VwYXJhdG9yIGhhcy1hbHBoYS1jaGFubmVsLW9wYWNpdHkiIC8+d208aDIgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkNvbW1vbiBpc3N1ZXMgd2hlbiBidWlsZGluZyBwbHVnaW5zIGNvbXBhdGlibGUgd2l0aCByZWFsLXRpbWUgY29sbGFib3JhdGlvbjwvaDI+d+oBPHA+V2hlbiByZWFsLXRpbWUgY29sbGFib3JhdGlvbiBpcyBhY3RpdmUsIGFsbCBjb25uZWN0ZWQgZWRpdG9ycyBzaGFyZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGRhdGEgc3RhdGUgdmlhIFlqcy4gUGx1Z2lucyB0aGF0IGludGVyYWN0IHdpdGggcG9zdCBkYXRhLCBlc3BlY2lhbGx5IGN1c3RvbSBwb3N0IG1ldGEsIG5lZWQgdG8gZm9sbG93IGNlcnRhaW4gcGF0dGVybnMgdG8gYXZvaWQgc3luYyBpc3N1ZXM8L3A+d0E8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPlN5bmNpbmcgY3VzdG9tIHBvc3QgbWV0YSB2YWx1ZXM8L2gzPneSAzxwPkluIGFkZGl0aW9uIHRvIGJlaW5nIHJlZ2lzdGVyZWQsIGN1c3RvbSBtZXRhIGZpZWxkIFVJIG11c3QgYmUgY29uc3VtZWQgZnJvbSB0aGUgV29yZFByZXNzIGRhdGEgc3RvcmUgYW5kIHBhc3NlZCB0byBjb250cm9sbGVkIGlucHV0IGNvbXBvbmVudHMuPGJyPkFsd2F5cyBkZXJpdmUgdGhlIGlucHV0IHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIFdvcmRQcmVzcyBkYXRhIHN0b3JlIHZpYSA8Y29kZT51c2VTZWxlY3Q8L2NvZGU+LiBJbiBhZGRpdGlvbiwgdXNlIDxjb2RlPnZhbHVlPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmRlZmF1bHRWYWx1ZTwvY29kZT4gb24gaW5wdXQgY29tcG9uZW50cyBzbyB0aGUgaW5wdXQgYWx3YXlzIHJlZmxlY3RzIHRoZSBjdXJyZW50IGRhdGEgc3RvcmUgc3RhdGUuPC9wPndQPGgzIGNsYXNzPSJ3cC1ibG9jay1oZWFkaW5nIj5Bdm9pZGluZyBsb2NhbCBjb21wb25lbnQgc3RhdGUgZm9yIHNoYXJlZCBkYXRhPC9oMz53sQM8cD5XaGVuIGJ1aWxkaW5nIGEgcGx1Z2luIFVJIHRoYXQgcmVhZHMgZnJvbSB0aGUgV29yZFByZXNzIGRhdGEgc3RvcmUsIGF2b2lkIGNvcHlpbmcgdGhhdCBkYXRhIGludG8gbG9jYWwgUmVhY3Qgc3RhdGUgd2l0aCB1c2VTdGF0ZS4gVGhpcyBhcHBsaWVzIHRvIGFueSBzaGFyZWQgZGF0YSwgc3VjaCBhcyBwb3N0IG1ldGEgb3IgYmxvY2sgYXR0cmlidXRlcy4gRG9pbmcgc28gZGlzY29ubmVjdHMgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgc2hhcmVkIGNvbGxhYm9yYXRpdmUgc3RhdGU6IHVwZGF0ZXMgZnJvbSBvdGhlciBjbGllbnRzIHdpbGwgdXBkYXRlIHRoZSBzdG9yZSwgYnV0IHlvdXIgY29tcG9uZW50IHdvbid0IHJlZmxlY3QgdGhlbSBhZnRlciB0aGUgaW5pdGlhbCByZW5kZXIsIGxlYWRpbmcgdG8gc3RhbGUgb3IgY29uZmxpY3RpbmcgZGF0YS48L3A+d0c8aDMgY2xhc3M9IndwLWJsb2NrLWhlYWRpbmciPkJsb2NrcyB3aXRoIHNpZGUgZWZmZWN0cyBvbiBpbnNlcnRpb248L2gzPnewATxwPkN1c3RvbSBibG9ja3MgdGhhdCB0cmlnZ2VyIHNpZGUgZWZmZWN0cyBvbiBpbnNlcnRpb24gd2lsbCB0cmlnZ2VyIHRoYXQgc2lkZSBlZmZlY3QgZm9yIGFsbCBjb25uZWN0ZWQgY29sbGFib3JhdG9ycywgc2luY2UgYmxvY2sgY29udGVudCBzeW5jcyBpbW1lZGlhdGVseSB1cG9uIGluc2VydGlvbi48L3A+d+ABPHA+Rm9yIGV4YW1wbGUsIGluc3RlYWQgb2YgYXV0by1vcGVuaW5nIGEgbW9kYWwgd2hlbiBhIGJsb2NrIGlzIGluc2VydGVkLCBzaG93IGEgcGxhY2Vob2xkZXIgd2l0aCBhIGJ1dHRvbiB0aGF0IG9wZW5zIHRoZSBtb2RhbCBvbiBjbGljay4gVGhpcyBlbnN1cmVzIHNpZGUgZWZmZWN0cyBhcmUgaW50ZW50aW9uYWwgYW5kIGxvY2FsIHRvIHRoZSB1c2VyIHRha2luZyB0aGUgYWN0aW9uLjwvcD53OzxociBjbGFzcz0id3AtYmxvY2stc2VwYXJhdG9yIGhhcy1hbHBoYS1jaGFubmVsLW9wYWNpdHkiIC8+eHcJY29yZS9saXN0eXcAeHcOY29yZS9saXN0LWl0ZW14dw5jb3JlL2xpc3QtaXRlbXh3DmNvcmUvbGlzdC1pdGVteHcOY29yZS9wYXJhZ3JhcGh5ELfIrP8NAQAA\/aqFygwRANUVFgABAAEBAQUBAAYoswYEBc4GBAAMAAEACAABAQEBAQMBANeq8JkLAQAAhbijvwkCAADiAgCymvyACQEAAMap8+0IAQAA19fTqAgBAADrwvelCCAAAA0JGQIIAgEABwID7AgBAAEADbECAQcBEBGOATUDHgAwAAEdBAAFAAG6BAG5BAEABAOSBQAIAIEBAFWzAgEAQAQBBQIARwDQy6aTCAQAAxwCAjIEA\/Kj3IUIAQAA773ZsgcBAAC4\/KntBQEAAPG204sD1QIAAgYAEAABAQIABgBntQIBAAEAN7sBAgABAB7DBAIAAQBBywkB0QQBAAEAAkYEDgEfG4wCAgABAE37BQHyBwEAAQAJ3gECAAEAGwAtAAEAAQEBAwMAAQEBAAEAAgAMqwEBAAEAAgCvAQABAAEBAQMBAAIABQABAAEBAQMBAAIABC4BGQG7BAEAAbIEAQDXAd8CAucCGugHAQDqAQCnAQA4AAECAQBOAAIADAf4DgABAQEBAQECAxsZAQQBAQICAQECAAEFAQM2ABAAHwAKAAYACAAKABUANAAGDb8BAE0ACgLpAgI2AQMAKwMRAzoDAwKjAwKBAQECACsDMDUDCAEMAUk4CQEMAQ8BDisDAgNPAxEFLQYBAycAJwMKBAgDBQMNAwIBBwMNAAIDEwMCAx0AAgMjAwJYQQMCBCIDJQJTAToBiQEAAwAFAAwAAQBWAuMBAAEAIgLlAgEEBBQDCANMAwIDAgsBAwEBAQEBDQEBAQMBBgEDPwMDAwEDDggOAAEBAQM3AqsDACgCqgECgwIDEAIGAToAvAEBAQICCwUKAQ4cAQsBAQIFHAElUwABAAEBAQIEAAEAAgAJvwkCwwkBAAGwSaoCAJ0CACwAAQEBAAEAAgABARgdAQECAgEBAgACAwEBBwYxAKoCADkAAQEBAAEAAgABARoNAQMBCQEHAQICBAEHAQYEAAIAAQUCdwMHAQYgAAEBAQMJIwEAAgABAAEBAYgCBABYAD4AiAEHAQABAAEBAQMDnwoBAAEAAgABAAIDIQYrAKsDAIsBlQIBAAQD4wEAAvADAQAEB+QChAEqAAEAAoUBAckCMOAGAQAEA6oDsgMCugMBAAEAAgABAyejBgEABAPcAQABAAEBAQMDmAUBAAQHqwE1AQ4BMQEIUwABAQEAAQACAAEBGBEBAwECAQcBAgIEAQcBBQoNCAYWBRAXZQCLAQQ1AGUAAQHWAmsBCAIJELUGAQC5A8YBAQMQAAwADAKGytqHAwUAAHMArgEVCgEGAeXn8bMCAQADhID14gEvAAMBAAEAAQABAAEAAQABAAEUAQABAAEAAQABGgEABwABAAEAAQABAAEOAQABAAEAAQABAAEDAQABAQG4AQECBAAEACeOAQIABAA2VQMABAROAAQAAQCqAwgJBAQJAgEaAA==\",\"updateId\":402776993}","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1175],"tags":[5676,1443,5834],"class_list":["post-121947","post","type-post","status-publish","format-standard","hentry","category-general","tag-7-0","tag-dev-notes","tag-dev-notes-7-0","mentions-ingeniumed","author-ingeniumed"],"revision_note":"","jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2AvED-vIT","_links":{"self":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/121947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/users\/20796576"}],"replies":[{"embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/comments?post=121947"}],"version-history":[{"count":18,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/121947\/revisions"}],"predecessor-version":[{"id":122011,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/posts\/121947\/revisions\/122011"}],"wp:attachment":[{"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/media?parent=121947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/categories?post=121947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/make.wordpress.org\/core\/wp-json\/wp\/v2\/tags?post=121947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}