@adonoustech/bacon-tax 2.5.74 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -455,6 +455,19 @@ exports.ActionTaxFragments = [
455
455
  <p>This information is crucial for calculating potential capital gains or losses and determining their impact on your tax obligations. Please attach any supporting documentation, such as sales receipts, deeds, contracts, or brokerage statements, to substantiate the details provided.</p>
456
456
  <p>We appreciate your prompt attention to this matter and are here to assist with any questions you may have. You can reach us via email or phone for further discussion.</p>
457
457
  <p>Thank you for your cooperation.</p>`,
458
+ },
459
+ {
460
+ actionTaxSubject: "Disposed Digital Assets",
461
+ actionTitle: "Disposed Digital Assets",
462
+ actionInstructions: `<p>You answered "Yes" to disposing of digital assets this tax year. To accurately report your transactions, please submit the following:</p>
463
+ <ol>
464
+ <li>Transaction dates</li>
465
+ <li>Types of assets bought, sold, or exchanged</li>
466
+ <li>Amounts involved in each transaction</li>
467
+ <li>Any 1099 forms received for digital asset activities</li>
468
+ <li>Details of mining, staking, or airdrop income, if applicable</li>
469
+ </ol>
470
+ <p><strong>Note:</strong> Include all sales, trades, and exchanges, even if you didn't receive a tax form.</p>`,
458
471
  },
459
472
  {
460
473
  actionTaxSubject: "Mutual Fund Gain",
@@ -1911,7 +1924,7 @@ exports.ActionTaxFragments = [
1911
1924
  <li><strong>Advanced Premium Tax Credit (APTC) Repayment Information</strong>, if applicable: If you received an advance payment of the premium tax credit, we need information regarding these payments to reconcile the amount on your return.</li>
1912
1925
  </ol>
1913
1926
  <p>Please ensure that all requested information is submitted as soon as possible to avoid any delays in processing your tax return. Should you have any questions or require assistance in gathering these documents, do not hesitate to contact our office.</p>
1914
- <p>Thank you for your prompt attention to this matter. We look forward to serving you and ensuring you receive all the tax benefits you are entitled to.</p>`
1927
+ <p>Thank you for your prompt attention to this matter. We look forward to serving you and ensuring you receive all the tax benefits you are entitled to.</p>`,
1915
1928
  },
1916
1929
  {
1917
1930
  actionTaxSubject: "Net Investment Income Tax",
@@ -1926,7 +1939,7 @@ exports.ActionTaxFragments = [
1926
1939
  <li><strong>Form 8960:</strong> If available, any prior year Form 8960 you have filed for Net Investment Income Tax, which can provide a basis for estimates and planning.</li>
1927
1940
  </ol>
1928
1941
  <p>Ensuring we have all necessary information will not only streamline your tax preparation process but also help in leveraging potential tax-saving opportunities related to investment income. Please do not hesitate to contact us if you need assistance in gathering any of the above information.</p>
1929
- <p>Thank you for your prompt attention to this matter. We look forward to assisting you further.</p>`
1942
+ <p>Thank you for your prompt attention to this matter. We look forward to assisting you further.</p>`,
1930
1943
  },
1931
1944
  {
1932
1945
  actionTaxSubject: "Additional Medicare Tax",
@@ -1952,7 +1965,7 @@ exports.ActionTaxFragments = [
1952
1965
  </ol>
1953
1966
  <p>We also remind you that if you and/or your spouse are self-employed, additional details regarding your business income and expenses will be needed to determine your net earnings and potential Additional Medicare Tax obligations.</p>
1954
1967
  <p>This information is critical for ensuring compliance with IRS regulations and accurately calculating any potential Additional Medicare Tax liabilities. Please provide these documents at your earliest convenience.</p>
1955
- <p>Thank you for your prompt attention to this matter.</p>`
1968
+ <p>Thank you for your prompt attention to this matter.</p>`,
1956
1969
  },
1957
1970
  {
1958
1971
  actionTaxSubject: "Nanny Tax",
@@ -1968,7 +1981,7 @@ exports.ActionTaxFragments = [
1968
1981
  <li>Any other relevant tax documents or information related to the employment.</li>
1969
1982
  </ol>
1970
1983
  <p>This information is crucial for accurately reporting your tax obligations and potentially avoiding penalties for non-compliance. Please provide the requested documents at your earliest convenience or contact us if you require assistance gathering this information.</p>
1971
- <p>We appreciate your attention to this matter and are here to help you navigate through this process.</p>`
1984
+ <p>We appreciate your attention to this matter and are here to help you navigate through this process.</p>`,
1972
1985
  },
1973
1986
  {
1974
1987
  actionTaxSubject: "Foreign Earned Income",
@@ -1987,7 +2000,7 @@ exports.ActionTaxFragments = [
1987
2000
  </ol>
1988
2001
  <p>These documents and details are crucial for determining the best approach to handle your foreign earned income and potentially maximize your tax benefits.</p>
1989
2002
  <p>Please have these materials ready and send them to us at your earliest convenience. If you have any questions or need further clarification on any of the items requested, do not hesitate to reach out.</p>
1990
- <p>Thank you for your prompt attention to this matter. We look forward to assisting you with your taxes.</p>`
2003
+ <p>Thank you for your prompt attention to this matter. We look forward to assisting you with your taxes.</p>`,
1991
2004
  },
1992
2005
  {
1993
2006
  actionTaxSubject: "Foreign Housing Exclusion",
@@ -2003,7 +2016,7 @@ exports.ActionTaxFragments = [
2003
2016
  </ol>
2004
2017
  <p>Please ensure that all documents are clearly legible and in a format that can be easily shared electronically. The accuracy and completeness of these documents are essential for a correct and optimized filing of your tax return, especially concerning the Foreign Housing Exclusion.</p>
2005
2018
  <p>If you have questions or need further clarification on any of the required documents, please feel free to contact us at your convenience.</p>
2006
- <p>Thank you for your prompt attention to this matter.</p>`
2019
+ <p>Thank you for your prompt attention to this matter.</p>`,
2007
2020
  },
2008
2021
  {
2009
2022
  actionTaxSubject: "Foreign Housing Deduction",
@@ -2019,7 +2032,7 @@ exports.ActionTaxFragments = [
2019
2032
  </ol>
2020
2033
  <p>We understand this may involve gathering several documents, but ensuring we have accurate and complete information is crucial for maximizing your potential deductions and remaining compliant with tax regulations.</p>
2021
2034
  <p>Please submit these documents at your earliest convenience or contact us to discuss any challenges you may face in obtaining them. Our team is here to support you through this process.</p>
2022
- <p>Thank you for your prompt attention to this matter.</p>`
2035
+ <p>Thank you for your prompt attention to this matter.</p>`,
2023
2036
  },
2024
2037
  {
2025
2038
  actionTaxSubject: "Foreign Tax Credit",
@@ -2035,7 +2048,7 @@ exports.ActionTaxFragments = [
2035
2048
  </ol>
2036
2049
  <p>This information is vital for ensuring your tax returns are as beneficial to your situation as allowed by law and for preventing any unnecessary delays.</p>
2037
2050
  <p>Please upload the requested information to our secure client portal or email it to us at tax@lendahandaccounting.com at your earliest convenience. Should you have any questions or require assistance in gathering these documents, please do not hesitate to contact us.</p>
2038
- <p>Thank you for your prompt attention to this matter.</p>`
2051
+ <p>Thank you for your prompt attention to this matter.</p>`,
2039
2052
  },
2040
2053
  {
2041
2054
  actionTaxSubject: "Traditional IRA Contribution",
@@ -2057,7 +2070,7 @@ exports.ActionTaxFragments = [
2057
2070
  </ol>
2058
2071
  <p>This information is essential for accurately determining your tax liabilities or benefits associated with your IRA contributions, and for ensuring compliance with the IRS rules and regulations. </p>
2059
2072
  <p>Please provide these documents at your earliest convenience to facilitate the timely completion of your tax filing. If you have any questions or need further assistance in gathering this information, do not hesitate to reach out.<p>
2060
- <p>Thank you for your prompt attention to this request.</p>`
2073
+ <p>Thank you for your prompt attention to this request.</p>`,
2061
2074
  },
2062
2075
  {
2063
2076
  actionTaxSubject: "Roth IRA Contribution",
@@ -2079,7 +2092,7 @@ exports.ActionTaxFragments = [
2079
2092
  </ol>
2080
2093
  <p>Gathering this information is vital for a comprehensive analysis of your tax situation, ensuring the correct treatment of your Roth IRA contributions and any distributions, and complying with IRS regulations.</p>
2081
2094
  <p>Please forward the requested documentation at your earliest convenience to ensure a smooth and efficient tax preparation process. Should you have any queries or require assistance in obtaining these documents, please feel free to contact us.</p>
2082
- <p>We appreciate your cooperation and prompt response.</p>`
2095
+ <p>We appreciate your cooperation and prompt response.</p>`,
2083
2096
  },
2084
2097
  {
2085
2098
  actionTaxSubject: "Foreign Assets",
@@ -2096,7 +2109,7 @@ exports.ActionTaxFragments = [
2096
2109
  <li><strong>Income Generated:</strong> Information on any income generated from these assets, such as interest, dividends, or capital gains.</li>
2097
2110
  </ol>
2098
2111
  <p>This information is imperative to ensure full compliance and mitigate any risks of penalties. Kindly send the requested documents and information as soon as possible, to allow ample time for proper filing.</p>
2099
- <p>If you have any questions or need further clarification, please do not hesitate to contact us. Thank you for your prompt attention to this matter.</p>`
2112
+ <p>If you have any questions or need further clarification, please do not hesitate to contact us. Thank you for your prompt attention to this matter.</p>`,
2100
2113
  },
2101
2114
  {
2102
2115
  actionTaxSubject: "Foreign Gifts",
@@ -2111,7 +2124,7 @@ exports.ActionTaxFragments = [
2111
2124
  <li><strong>Documentation:</strong> Attach any relevant documentation such as bank statements, foreign gift declaration forms, or legal documents related to the receipt of these gifts.</li>
2112
2125
  </ol>
2113
2126
  <p>This information is crucial to fulfill our obligations and ensure the correctness of your tax filings. Failure to report foreign gifts or bequests accurately can result in penalties. We appreciate your prompt attention to this request.</p>
2114
- <p>If you have any questions or need assistance gathering this information, please do not hesitate to contact us.</p>`
2127
+ <p>If you have any questions or need assistance gathering this information, please do not hesitate to contact us.</p>`,
2115
2128
  },
2116
2129
  {
2117
2130
  actionTaxSubject: "Depreciable Assets",
@@ -2133,7 +2146,7 @@ exports.ActionTaxFragments = [
2133
2146
 
2134
2147
  <p>We encourage you to be as comprehensive as possible when listing your assets. If you are unsure whether an item should be included, please provide the details, and we will determine the appropriate treatment.</p>
2135
2148
 
2136
- <p>If you have any questions or need further clarification, please do not hesitate to <strong>contact us</strong>. We appreciate your prompt attention to this matter and look forward to working with you to ensure the accuracy and completeness of your tax return.</p>`
2149
+ <p>If you have any questions or need further clarification, please do not hesitate to <strong>contact us</strong>. We appreciate your prompt attention to this matter and look forward to working with you to ensure the accuracy and completeness of your tax return.</p>`,
2137
2150
  },
2138
2151
  {
2139
2152
  actionTaxSubject: "Passive Business Activities",
@@ -2153,7 +2166,7 @@ exports.ActionTaxFragments = [
2153
2166
 
2154
2167
  <p>This information is pivotal for assessing your passive activity losses and correctly applying them against your passive activity income, in line with the IRS passive activity loss rules.</p>
2155
2168
 
2156
- <p>We appreciate your cooperation and prompt response to this request. Should you have any questions or require assistance in gathering this information, please do not hesitate to contact us.</p>`
2169
+ <p>We appreciate your cooperation and prompt response to this request. Should you have any questions or require assistance in gathering this information, please do not hesitate to contact us.</p>`,
2157
2170
  },
2158
2171
  {
2159
2172
  actionTaxSubject: "General Business Credits",
@@ -2179,7 +2192,7 @@ exports.ActionTaxFragments = [
2179
2192
 
2180
2193
  <p>Your insights will greatly assist us in ensuring we explore all avenues to reduce your tax liability and capitalize on available credits.</p>
2181
2194
 
2182
- <p>We appreciate your prompt attention to this matter. If you have any questions or need further clarification on any of these credits, please feel free to contact us.</p>`
2195
+ <p>We appreciate your prompt attention to this matter. If you have any questions or need further clarification on any of these credits, please feel free to contact us.</p>`,
2183
2196
  },
2184
2197
  {
2185
2198
  actionTaxSubject: "Business Assets Sold",
@@ -2202,7 +2215,7 @@ exports.ActionTaxFragments = [
2202
2215
 
2203
2216
  <p>If you have any questions or need assistance in gathering this information, please do not hesitate to reach out. We are here to assist you every step of the way.</p>
2204
2217
 
2205
- <p>Thank you for your prompt attention to this matter.</p>`
2218
+ <p>Thank you for your prompt attention to this matter.</p>`,
2206
2219
  },
2207
2220
  ];
2208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JB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d0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBa0J1QztLQUM1RDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQWN0aW9uVGF4RnJhZ21lbnRzID0gW1xyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpb3IgWWVhciBUYXggUmV0dXJuc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IGBQcm92aWRlIFByaW9yIFllYXIgVGF4IFJldHVybnNgLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCByZXF1aXJlIHlvdXIgYXNzaXN0YW5jZSB0byBlbnN1cmUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcy4gT25lIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHdlIG5lZWQgaXMgeW91ciA8c3Ryb25nPlByaW9yIFllYXIgVGF4IFJldHVybnM8L3N0cm9uZz4uIFRoaXMgZG9jdW1lbnQgaXMgZXNzZW50aWFsIGZvciBzZXZlcmFsIHJlYXNvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHZlcmlmeWluZyBjYXJyeS1mb3J3YXJkIGFtb3VudHMsIGNvbXBhcmluZyB5ZWFyLW92ZXIteWVhciBpbmNvbWUgYW5kIGRlZHVjdGlvbnMsIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxyXG4gICAgPHA+VG8gZmFjaWxpdGF0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiB5b3VyIDxzdHJvbmc+RmVkZXJhbCB0YXggcmV0dXJuPC9zdHJvbmc+IGZvciB0aGUgbGFzdCB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPlN0YXRlIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSA8c3Ryb25nPm5vdGljZXMgb3IgYW1lbmRtZW50czwvc3Ryb25nPiByZWxhdGVkIHRvIHlvdXIgcHJpb3IgeWVhciB0YXggcmV0dXJucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBkaWZmaWN1bHR5IGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBsZXQgdXMga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIGNhbiBkaXNjdXNzIGFsdGVybmF0aXZlIHNvbHV0aW9ucy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFByb3ZpZGluZyB0aGVzZSB3aWxsIGVuYWJsZSB1cyB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiB3aXRob3V0IGRlbGF5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdGF0dXRvcnkgRXh0ZW5zaW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IGBEZXRlcm1pbmluZyBFbGlnaWJpbGl0eSBmb3IgU3RhdHV0b3J5IEZpbGluZyBFeHRlbnNpb25zYCxcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB5b3UgcXVhbGlmeSBmb3Igc3RhdHV0b3J5IGZpbGluZyBleHRlbnNpb25zIGZvciB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2Ugc2VlIGJlbG93IHRoZSBjYXRlZ29yaWVzIG9mIGluZm9ybWF0aW9uIG5lZWRlZCBiYXNlZCBvbiBkaWZmZXJlbnQgZWxpZ2liaWxpdHkgY3JpdGVyaWE6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZlZGVyYWwgRGlzYXN0ZXIgQXJlYXM8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIHByaW1hcnkgcmVzaWRlbmNlIGxvY2F0aW9uIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBjb3JyZXNwb25kZW5jZSByZWNlaXZlZCByZWdhcmRpbmcgZGlzYXN0ZXIgZGVjbGFyYXRpb25zIGluIHlvdXIgYXJlYS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TGl2aW5nIEFicm9hZDwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+UHJvb2Ygb2YgcmVzaWRlbmNlIG91dHNpZGUgdGhlIFVuaXRlZCBTdGF0ZXMgZm9yIG1vcmUgdGhhbiAzMzAgZnVsbCBkYXlzIHdpdGhpbiBhIDEyLW1vbnRoIHBlcmlvZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB5b3VyIHBoeXNpY2FsIHByZXNlbmNlIG9yIGJvbmEgZmlkZSByZXNpZGVuY2UgaW4gYSBmb3JlaWduIGNvdW50cnkuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjdGl2ZSBNaWxpdGFyeTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBpbmRpY2F0aW5nIGFjdGl2ZSBkdXR5IHN0YXR1cywgaW5jbHVkaW5nIGRhdGVzIG9mIHNlcnZpY2Ugd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIG9yZGVycyBmb3Igb3ZlcnNlYXMgZGVwbG95bWVudC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29tYmF0IFpvbmU8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk9mZmljaWFsIG9yZGVycyBkZW1vbnN0cmF0aW5nIHlvdXIgZGVwbG95bWVudCB0byBhIGNvbWJhdCB6b25lLCBpbmNsdWRpbmcgdGhlIHNwZWNpZmljIGRhdGVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IHJlbGV2YW50IGNvbW11bmljYXRpb24gZnJvbSB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIG9yIG90aGVyIG9mZmljaWFsIGJvZGllcyByZWdhcmRpbmcgeW91ciBzZXJ2aWNlIGluIGEgY29tYmF0IHpvbmUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwZW5kZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVxdWVzdCBmb3IgRGVwZW5kZW50IEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgbmVlZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGRlcGVuZGVudHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYXBwbHlpbmcgdGhlIG1vc3QgYmVuZWZpY2lhbCBkZXBlbmRlbmN5IHRlc3RzLCBpbmNsdWRpbmcgcXVhbGlmaWNhdGlvbnMgZm9yIEhlYWQgb2YgSG91c2Vob2xkIChIT0gpLCBDaGlsZCBUYXggQ3JlZGl0LCBhbmQgb3RoZXIgcmVsYXRlZCBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIG9mIHlvdXIgY2xhaW1lZCBkZXBlbmRlbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GdWxsIE5hbWU6PC9zdHJvbmc+IFRoZSBjb21wbGV0ZSBsZWdhbCBuYW1lIG9mIHRoZSBkZXBlbmRlbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9yIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoVElOKTo8L3N0cm9uZz4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBCaXJ0aDo8L3N0cm9uZz4gSGVscHMgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBjZXJ0YWluIGNyZWRpdHMgbGlrZSB0aGUgQ2hpbGQgVGF4IENyZWRpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbGF0aW9uc2hpcCB0byBZb3U6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRlcGVuZGVudCdzIHJlbGF0aW9uc2hpcCAoc29uLCBkYXVnaHRlciwgc3RlcGNoaWxkLCBmb3N0ZXIgY2hpbGQsIGJyb3RoZXIsIHNpc3RlciwgZXRjLikgdG8geW91LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVzaWRlbmN5Ojwvc3Ryb25nPiBDb25maXJtIHRoZSBkZXBlbmRlbnQgbGl2ZWQgd2l0aCB5b3UgZm9yIG1vcmUgdGhhbiBoYWxmIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN1cHBvcnQ6PC9zdHJvbmc+IENvbmZpcm0geW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBkZXBlbmRlbnTigJlzIGZpbmFuY2lhbCBzdXBwb3J0IGZvciB0aGUgeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNpdGl6ZW5zaGlwOjwvc3Ryb25nPiBDb25maXJtIHRoZSBkZXBlbmRlbnQgaXMgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGUgZGVwZW5kZW50IGlzIG1hcnJpZWQgYW5kLCBpZiBzbywgd2hldGhlciB0aGV5IGFyZSBmaWxpbmcgam9pbnRseS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgaW5jb21lIHRoZSBkZXBlbmRlbnQgbWF5IGhhdmUgZWFybmVkIG9yIHJlY2VpdmVkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3UgcHJvdmlkZSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgaW5mb3JtYXRpb24gdG8gYXZvaWQgYW55IGRlbGF5cyBpbiB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSGVhZCBvZiBIb3VzZWhvbGRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkhlYWQgb2YgSG91c2Vob2xkIEZpbGluZ1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBjb21wbGlhbnQgdGF4IGZpbGluZyB1bmRlciB0aGUgXCJIZWFkIG9mIEhvdXNlaG9sZFwiIHN0YXR1cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4gVGhpcyBzdGF0dXMgY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IGJlbmVmaXRzLCBhbmQgaXQgaXMgY3J1Y2lhbCB0aGF0IGFsbCBJUlMgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIFBsZWFzZSBwcm92aWRlOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBDb25maXJtYXRpb24gb2YgeW91ciBtYXJpdGFsIHN0YXR1cyBhcyBvZiB0aGUgbGFzdCBkYXkgb2YgdGhlIHRheCB5ZWFyIChlLmcuLCBzaW5nbGUsIGRpdm9yY2VkLCBsZWdhbGx5IHNlcGFyYXRlZCkuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkhvdXNlaG9sZCBFeHBlbnNlczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBpbmRpY2F0aW5nIHRoYXQgeW91IHBhaWQgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGNvc3RzIG9mIGtlZXBpbmcgdXAgYSBob21lIGZvciB0aGUgdGF4IHllYXIuIFRoaXMgaW5jbHVkZXMgcmVudCwgbW9ydGdhZ2UgaW50ZXJlc3QsIHByb3BlcnR5IHRheGVzLCB1dGlsaXRpZXMsIHJlcGFpcnMsIG1haW50ZW5hbmNlLCBhbmQgZ3JvY2VyaWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5RdWFsaWZ5aW5nIFBlcnNvbjo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHF1YWxpZnlpbmcgcGVyc29uKHMpIHdobyBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgaG9tZSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHllYXIsIGV4Y2VwdCBmb3IgdGVtcG9yYXJ5IGFic2VuY2VzIHN1Y2ggYXMgc2Nob29sLiBQbGVhc2UgaW5jbHVkZTpcclxuICAgICAgPHVsPlxyXG4gICAgICA8bGk+RnVsbCBuYW1lIGFuZCByZWxhdGlvbnNoaXAgdG8geW91IChlLmcuLCBjaGlsZCwgcGFyZW50LCBzaWJsaW5nKS48L2xpPlxyXG4gICAgICA8bGk+RHVyYXRpb24gb2YgcmVzaWRlbmN5IGF0IHlvdXIgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5TdXBwb3J0aW5nIGRvY3VtZW50cyAoYmlydGggY2VydGlmaWNhdGVzLCBzY2hvb2wgcmVjb3JkcywgZXRjLikgcHJvdmluZyB0aGUgcmVzaWRlbmN5IGFuZCByZWxhdGlvbnNoaXAuPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIFN1cHBvcnQ6PC9zdHJvbmc+IEFueSBmdXJ0aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB5b3VyIGNsYWltIGZvciB0aGUgSGVhZCBvZiBIb3VzZWhvbGQgZmlsaW5nIHN0YXR1cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgcHJvdmlkaW5nIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIHlvdXIgYmVuZWZpdCBhbmQgdG8gY29tcGx5IHdpdGggdGF4IGxhd3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlc2lkZW5jeSBTdGF0dXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkluZm9ybWF0aW9uIG9uIFJlc2lkZW5jeSBTdGF0dXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCBlaXRoZXIgeW91IG9yIHlvdXIgc3BvdXNlIGlzIG5vdCBhIFUuUy4gY2l0aXplbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgeW91ciB0YXggc3RhdHVzLCB3ZSBuZWVkIHRvIGFwcGx5IHRoZSBuZWNlc3NhcnkgVGF4IFJlc2lkZW5jeSBUZXN0cywgd2hpY2ggaW5jbHVkZSB0aGUgPHN0cm9uZz5HcmVlbiBDYXJkIFRlc3Q8L3N0cm9uZz4gYW5kIHRoZSA8c3Ryb25nPlN1YnN0YW50aWFsIFByZXNlbmNlIFRlc3Q8L3N0cm9uZz4uIFRoaXMgd2lsbCBoZWxwIHVzIGVuc3VyZSB5b3VyIHRheCByZXR1cm5zIGFyZSBjb21wbGV0ZWQgY29ycmVjdGx5IGFuZCBjb21wbHkgd2l0aCBVLlMuIHJlZ3VsYXRpb25zLjwvcD5cclxuXHJcbiAgICA8cD5UbyBwcm9jZWVkLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkdyZWVuIENhcmQgU3RhdHVzOjwvc3Ryb25nPiBQbGVhc2UgY29uZmlybSBpZiB5b3Ugb3IgeW91ciBzcG91c2UgaGF2ZSBiZWVuIGlzc3VlZCBhIFUuUy4gZ3JlZW4gY2FyZCAoTGF3ZnVsIFBlcm1hbmVudCBSZXNpZGVudCBDYXJkKSBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci4gSWYgeWVzLCBwcm92aWRlIGEgY29weSBvZiB0aGUgZ3JlZW4gY2FyZCBvciB0aGUgb2ZmaWNpYWwgZG9jdW1lbnQgY29uZmlybWluZyB0aGUgc3RhdHVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBBcnJpdmFsIGluIHRoZSBVLlMuOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZXMgd2hlbiB5b3UgYW5kL29yIHlvdXIgc3BvdXNlIGZpcnN0IGFycml2ZWQgaW4gdGhlIFUuUy4gZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRyYXZlbCBIaXN0b3J5Ojwvc3Ryb25nPiBBIGRldGFpbGVkIGxpc3Qgb2YgYWxsIHRoZSBkYXRlcyB5b3UgYW5kL29yIHlvdXIgc3BvdXNlIGVudGVyZWQgYW5kIGxlZnQgdGhlIFUuUy4gZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgU3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlZpc2EgVHlwZTo8L3N0cm9uZz4gSWYgeW91IG9yIHlvdXIgc3BvdXNlIGFyZSBvbiBhIHZpc2EsIHBsZWFzZSBzcGVjaWZ5IHRoZSB0eXBlIGFuZCBwcm92aWRlIGEgY29weSBvZiB0aGUgdmlzYS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXIgVGF4IEZpbGluZ3M6PC9zdHJvbmc+IENvcGllcyBvZiBsYXN0IHllYXIncyB0YXggcmV0dXJucywgaWYgYXBwbGljYWJsZS4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gcHJvdmlkZSBjb250ZXh0IGFuZCBoZWxwIGRldGVybWluZSByZXNpZGVuY3kgc3RhdHVzIG1vcmUgYWNjdXJhdGVseS48L2xpPlxyXG4gICAgPC9vbD5cclxuXHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBZb3UgY2FuIHNlbmQgdGhlbSB0byB1cyB2aWEgZW1haWwgb3IgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuIEZvciBhbnkgcXVlc3Rpb25zIG9yIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuXHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3Ugd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSm9pbnQgVGF4IFJlbGllZlwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSm9pbnQgVGF4IFJlbGllZiBEZXRhaWxzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBhc3Npc3QgeW91IGVmZmVjdGl2ZWx5IHdpdGggeW91ciByZXF1ZXN0IGZvciBqb2ludCB0YXggcmVsaWVmLCB3ZSBuZWVkIHRvIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB5b3VyIHNpdHVhdGlvbiB0aG9yb3VnaGx5LiBUaGlzIHdpbGwgaGVscCB1cyBkZXRlcm1pbmUgdGhlIG1vc3Qgc3VpdGFibGUgdHlwZSBvZiByZWxpZWYgZm9yIHlvdXIgY2lyY3Vtc3RhbmNlcywgd2hpY2ggbWF5IGluY2x1ZGUgSW5ub2NlbnQgU3BvdXNlIFJlbGllZiwgSW5qdXJlZCBTcG91c2UgQWxsb2NhdGlvbiwgU2VwYXJhdGlvbiBvZiBMaWFiaWxpdHkgUmVsaWVmLCBvciBFcXVpdGFibGUgUmVsaWVmLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbXBsZXRlIFRheCBSZXR1cm5zOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIHRheCByZXR1cm5zIGZvciB0aGUgeWVhcnMgeW91IGFyZSByZXF1ZXN0aW5nIHJlbGllZi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgd3JpdHRlbiBzdGF0ZW1lbnQgZXhwbGFpbmluZyB3aHkgeW91IGJlbGlldmUgeW91IHF1YWxpZnkgZm9yIHJlbGllZiwgaW5jbHVkaW5nIGFueSBzcGVjaWZpYyBldmVudHMgb3IgY2lyY3Vtc3RhbmNlcyB5b3Ugd2FudCB1cyB0byBjb25zaWRlci48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUHJvb2Ygb2YgeW91ciBjdXJyZW50IGluY29tZSBhbmQgdGhhdCBvZiB5b3VyIHNwb3VzZSBpZiBhcHBsaWNhYmxlLCBzdWNoIGFzIHJlY2VudCBwYXkgc3R1YnMsIFctMiBmb3Jtcywgb3Igb3RoZXIgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgRmluYW5jaWFsIFNpdHVhdGlvbjo8L3N0cm9uZz4gRG9jdW1lbnRzIHNob3dpbmcgeW91ciBjdXJyZW50IGZpbmFuY2lhbCBzaXR1YXRpb24sIGluY2x1ZGluZyBiYW5rIHN0YXRlbWVudHMsIG1vbnRobHkgYmlsbHMsIGFuZCBhbnkgb3RoZXIgbGlhYmlsaXRpZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBNYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgbGVnYWwgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gc2VwYXJhdGlvbiwgZGl2b3JjZSwgb3IgYW5udWxtZW50LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHRoYXQgcHJvdmUgd2hlcmUgZWFjaCBvZiB5b3UgaGFzIGxpdmVkIGR1cmluZyB0aGUgdGF4IHllYXJzIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkFueSBDb3JyZXNwb25kZW5jZSBmcm9tIHRoZSBJUlM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIHJlY2VpdmVkIGFueSBub3RpY2VzIG9yIGxldHRlcnMgZnJvbSB0aGUgSVJTIHJlZ2FyZGluZyB5b3VyIGpvaW50IHRheCBsaWFiaWxpdHksIHBsZWFzZSBpbmNsdWRlIGNvcGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwsIG9yIHVwbG9hZC4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBwcm9jZXNzIGNhbiBiZSBjb21wbGV4LCBidXQgd2UgYXJlIGhlcmUgdG8gZ3VpZGUgeW91IHRocm91Z2ggaXQuIE91ciBnb2FsIGlzIHRvIGVuc3VyZSB3ZSBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHlvdXIgc2l0dWF0aW9uIHRvIGFkdm9jYXRlIGZvciB0aGUgbW9zdCBmYXZvcmFibGUgb3V0Y29tZSBvbiB5b3VyIGJlaGFsZi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiMTA5OSBORUMgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCIxMDk5IE5FQyBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCByZXF1aXJlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCB5b3VyIHNvdXJjZXMgb2YgaW5jb21lLiBTcGVjaWZpY2FsbHksIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgeW91ciAxMDk5IE5FQyBJbmNvbWUuIFRoZSAxMDk5LU5FQyBmb3JtIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uLjwvcD5cclxuICAgIDxwPlRvIGVuc3VyZSBhIHRob3JvdWdoIGFuZCBhY2N1cmF0ZSB0YXggcHJlcGFyYXRpb24sIHBsZWFzZSBwcm92aWRlIHVzIHdpdGggdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPkFsbCAxMDk5LU5FQyBmb3JtczwvYj4geW91IHJlY2VpdmVkIGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgPGI+YWRkaXRpb25hbCBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uPC9iPiBub3QgcmVwb3J0ZWQgb24gYSAxMDk5LU5FQyBmb3JtLjwvbGk+XHJcbiAgICAgICAgPGxpPkluZm9ybWF0aW9uIHJlZ2FyZGluZyA8Yj5leHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgMTA5OSBORUMgaW5jb21lPC9iPiwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPklmIHlvdSBoYXZlIG5vdCB5ZXQgcmVjZWl2ZWQgYWxsIHlvdXIgMTA5OS1ORUMgZm9ybXMsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHByb3ZpZGUgYW4gZXN0aW1hdGUgb2Ygd2hlbiB5b3UgZXhwZWN0IHRvIHJlY2VpdmUgdGhlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciBpbmNvbWUgYW5kIGF2b2lkaW5nIHBvdGVudGlhbCBwZW5hbHRpZXMgb3IgYXVkaXRzIGZyb20gdGhlIElSUy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcmVhY2ggb3V0IHRvIHVzIGRpcmVjdGx5IHNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgcHJvY2Vzc2VkIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LjwvcD5cclxuYCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTY2hlZHVsZSBLLTEgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIFNjaGVkdWxlIEsgaW5jb21lIGZvciB0aGUgY3VycmVudCB0YXggeWVhci4gSW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgaXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHdlIGdhdGhlciBhbGwgbmVjZXNzYXJ5IGRvY3VtZW50cyByZWxhdGVkIHRvIHRoaXMgaW5jb21lLjwvcD5cclxuICAgIDxwPklmIHdlIGFyZSBwcmVwYXJpbmcgeW91ciBidXNpbmVzcyByZXR1cm4sIHJlc3QgYXNzdXJlZCB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUgdGhlIGFwcGxpY2FibGUgU2NoZWR1bGUgSy0xKHMpIGZvciB5b3VyIGJ1c2luZXNzIGludGVyZXN0cy4gSG93ZXZlciwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgY29sbGVjdCBjb3BpZXMgb2YgPHN0cm9uZz5hbGwgb3RoZXIgU2NoZWR1bGUgSy0xczwvc3Ryb25nPiB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgdG8gaW5jb3Jwb3JhdGUgaW50byB5b3VyIHBlcnNvbmFsIHRheCByZXR1cm4uPC9wPiAgXHJcbiAgICA8aDM+U3BlY2lmaWMgRG9jdW1lbnQgUmVxdWVzdDo8L2gzPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BbnkgYW5kIGFsbCBTY2hlZHVsZSBLLTEocykgeW91IGhhdmUgcmVjZWl2ZWQgZnJvbTo8L2xpPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPlBhcnRuZXJzaGlwczwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5TIENvcnBvcmF0aW9uczwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5Fc3RhdGUgb3IgVHJ1c3RzPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSA8c3Ryb25nPmNsZWFyIGFuZCBsZWdpYmxlPC9zdHJvbmc+IHRvIHByZXZlbnQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgcmV0dXJuLiBZb3UgbWF5IHN1Ym1pdCB0aGVzZSBkb2N1bWVudHMgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwsIG9yIGNvbnRhY3QgdXMgdG8gbWFrZSBhbHRlcm5hdGl2ZSBhcnJhbmdlbWVudHMgaWYgbmVjZXNzYXJ5LjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhbnkgYXNzaXN0YW5jZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2Ygc2VsZi1lbXBsb3ltZW50IGluY29tZSBub3QgcmVwb3J0ZWQgdGhyb3VnaCAxMDk5LU5FQyBmb3JtcyBvciBhIFNjaGVkdWxlIEstMS4gVG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF4aW1pemVzIHlvdXIgYmVuZWZpdHMsIGl0J3MgY3J1Y2lhbCB3ZSBnYXRoZXIgbW9yZSBkZXRhaWxzIGFib3V0IHRoZXNlIHNvdXJjZXMgb2YgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eTo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSB0aGUgbmF0dXJlIG9mIGVhY2ggYWN0aXZpdHkgZnJvbSB3aGljaCB5b3UgZGVyaXZlIHNlbGYtZW1wbG95bWVudCBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBvcGVyYXRpb246PC9zdHJvbmc+IEZvciBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eSwgc3BlY2lmeSB0aGUgZGF0ZXMgb3IgcmFuZ2Ugb2YgZGF0ZXMgZHVyaW5nIHdoaWNoIHlvdSBlYXJuZWQgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgaW5jb21lIGdlbmVyYXRlZDo8L3N0cm9uZz4gRm9yIGVhY2ggYWN0aXZpdHksIHByb3ZpZGUgdGhlIHRvdGFsIGFtb3VudCBvZiBpbmNvbWUgZWFybmVkIGJlZm9yZSBhbnkgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBpbmN1cnJlZDo8L3N0cm9uZz4gTGlzdCBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eS4gUGxlYXNlIGNhdGVnb3JpemUgdGhlc2UgZXhwZW5zZXMgKGUuZy4sIG9mZmljZSBzdXBwbGllcywgdHJhdmVsLCBhZHZlcnRpc2luZykuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWNvcmRzIG9yIGRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleGlzdGluZyByZWNvcmRzIG9yIGRvY3VtZW50YXRpb24gdGhhdCBjb3Jyb2JvcmF0ZSB5b3VyIGluY29tZSBhbmQgZXhwZW5zZXMsIHN1Y2ggYXMgYmFuayBzdGF0ZW1lbnRzLCByZWNlaXB0cywgaW52b2ljZXMsIG9yIGNvbnRyYWN0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IGFtb3VudCBvZiB0YXggeW91IG93ZSBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIHRoYXQgY2FuIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgdGltZWx5IGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQsIGFuZCB3ZSBhcmUgaGVyZSB0byBoZWxwIGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRW1wbG95bWVudCBXYWdlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRW1wbG95bWVudCBXYWdlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBlbnRydXN0aW5nIHVzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIEFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgcmV2aWV3IGFuZCBpbiBvdXIgcXVlc3QgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgd2FnZXMgZnJvbSBlbXBsb3ltZW50IG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCBlZmZlY3RpdmVseSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBhbGwgVy0yIGZvcm1zIHJlY2VpdmVkIGZyb20geW91ciBlbXBsb3llcnMuIFRoaXMgaW5jbHVkZXMgd2FnZXMgZWFybmVkIGZyb20gYWxsIHNvdXJjZXMsIG5vdCBqdXN0IGZyb20gdGhlIFMtQ29ycG9yYXRpb24sIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5WZXJpZmljYXRpb24gb2YgUy1Db3Jwb3JhdGlvbiBXYWdlczo8L3N0cm9uZz4gSWYgd2UgYXJlIGFsc28gaGFuZGxpbmcgeW91ciBidXNpbmVzcyB0YXhlcyBmb3IgYW4gUy1Db3Jwb3JhdGlvbiwgd2UgbGlrZWx5IGhhdmUgdGhlIHdhZ2UgaW5mb3JtYXRpb24gZm9yIHRoYXQgZW50aXR5LiBIb3dldmVyLCBmb3IgdGhvcm91Z2huZXNzIGFuZCBjb21wbGlhbmNlLCBwbGVhc2UgY29uZmlybSBpZiB0aGUgd2FnZXMgZnJvbSB0aGUgUy1Db3Jwb3JhdGlvbiBhcmUgZnVsbHkgcmVwcmVzZW50ZWQgaW4gdGhlIGRvY3VtZW50cyB3ZSBhbHJlYWR5IGhvbGQuIFRoaXMgd2lsbCBoZWxwIHVzIHZlcmlmeSB0aGF0IGFsbCBpbmNvbWUgaXMgYWNjdXJhdGVseSByZXBvcnRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgSW5jb21lIERvY3VtZW50czo8L3N0cm9uZz4gU2hvdWxkIHlvdSBoYXZlIG90aGVyIHNvdXJjZXMgb2Ygd2FnZSBpbmNvbWUgKGUuZy4sIGNvbnRyYWN0IHdvcmssIGJvbnVzZXMsIGV0Yy4pIG5vdCBjb3ZlcmVkIGJ5IHRoZSBXLTIgZm9ybXMgcHJvdmlkZWQsIHBsZWFzZSBpbmNsdWRlIGFueSAxMDk5IGZvcm1zIG9yIG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIGNvb3BlcmF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIEtpbmRseSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gVGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByb3BlcnR5IG9yIFNlcnZpY2VzIExpZXUgV2FnZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlByb3BlcnR5L1NlcnZpY2VzIGluIExpZXUgb2YgV2FnZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBwcm9wZXJ0eSBhbmQvb3Igc2VydmljZXMgaW4gbGlldSBvZiB0cmFkaXRpb25hbCB3YWdlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIHR5cGUgb2YgY29tcGVuc2F0aW9uIGNvbnN0aXR1dGVzIHRheGFibGUgaW5jb21lIGFuZCBtdXN0IGJlIGFjY3VyYXRlbHkgcmVwb3J0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBmdWxseSBjb21wbGlhbnQgd2l0aCBJUlMgcmVndWxhdGlvbnMuPC9wPlxyXG4gICAgPHA+VG8gYWNjdXJhdGVseSByZWNvZ25pemUgYW5kIHJlcG9ydCB0aGVzZSBpdGVtcyBhcyB0YXhhYmxlIGluY29tZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIFByb3BlcnR5IG9yIFNlcnZpY2VzOjwvc3Ryb25nPiBQcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYW55IHByb3BlcnR5IG9yIHNlcnZpY2VzIHlvdSByZWNlaXZlZC4gUGxlYXNlIGluY2x1ZGUgcGh5c2ljYWwgY2hhcmFjdGVyaXN0aWNzIGZvciBwcm9wZXJ0eSBvciB0aGUgc2NvcGUgb2Ygc2VydmljZXMgcmVuZGVyZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkZhaXIgTWFya2V0IFZhbHVlIGF0IFRpbWUgb2YgUmVjZWlwdDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGZhaXIgbWFya2V0IHZhbHVlIChGTVYpIG9mIGVhY2ggcHJvcGVydHkgb3Igc2VydmljZSBhdCB0aGUgdGltZSB5b3UgcmVjZWl2ZWQgaXQuIElmIHlvdSBoYXZlIGFueSBhcHByYWlzYWxzIG9yIGRvY3VtZW50cyB0byBzdXBwb3J0IHRoZSBGTVYsIHBsZWFzZSBpbmNsdWRlIHRoZW0uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb3IgQWdyZWVtZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZG9jdW1lbnRhdGlvbiBvciB3cml0dGVuIGFncmVlbWVudHMgdGhhdCBkZXRhaWwgdGhlIGFycmFuZ2VtZW50IGZvciByZWNlaXZpbmcgcHJvcGVydHkgb3Igc2VydmljZXMgaW4gbGlldSBvZiB3YWdlcy4gVGhpcyBjYW4gaW5jbHVkZSBjb250cmFjdHMsIGVtYWlscywgb3IgYW55IGZvcm0gb2YgY29tbXVuaWNhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUmVjZWlwdDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGF0ZShzKSBvbiB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlIHByb3BlcnR5IG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5FbXBsb3llci9Qcm92aWRlciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgcHJvcGVydHkgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGFzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBhcyBwb3NzaWJsZS4gSW5jb21wbGV0ZSBvciBpbmFjY3VyYXRlIGluZm9ybWF0aW9uIG1heSBsZWFkIHRvIGRlbGF5cyBpbiB0aGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuIG9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIHJlZ2FyZGluZyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3JpdGljYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90aWNlZCB5b3UndmUgbWVudGlvbmVkIGJlaW5nIHJlaW1idXJzZWQgZm9yIGNlcnRhaW4gZXhwZW5zZXMgdW5kZXIgYW4gRW1wbG95ZWUgQWNjb3VudGFibGUgUGxhbi4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSByZWltYnVyc2VtZW50cyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZm9ybWFsIHdyaXR0ZW4gQWNjb3VudGFibGUgUGxhbiBwcm92aWRlZCBieSB5b3VyIGVtcGxveWVyLiBUaGlzIHNob3VsZCBvdXRsaW5lIHRoZSBleHBlbnNlIGFsbG93YW5jZSBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcmVpbWJ1cnNlbWVudCBwb2xpY3kuPC9saT5cclxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gb3IgY29ycmVzcG9uZGVuY2UgZnJvbSB5b3VyIGVtcGxveWVyIGNvbmZpcm1pbmcgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHRoZSBBY2NvdW50YWJsZSBQbGFuLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgdGhlIGV4cGVuc2VzIHJlaW1idXJzZWQgdW5kZXIgdGhlIHBsYW4sIGluY2x1ZGluZyBkYXRlcywgYW1vdW50cywgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIGV4cGVuc2UgKHJlY2VpcHRzIG9yIGludm9pY2VzKSBwcm92aWRlZCB0byB5b3VyIGVtcGxveWVyIGZvciByZWltYnVyc2VtZW50IHVuZGVyIHRoZSBwbGFuLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIHJlaW1idXJzZW1lbnRzIG9yIHRoZSBBY2NvdW50YWJsZSBQbGFuLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdXMgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCBzbW9vdGhseSB3aXRoIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBlbnN1cmluZyBhbGwgZm9ybXMgb2YgY29tcGVuc2F0aW9uLCBpbmNsdWRpbmcgdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMsIGFyZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIG9uIHlvdXIgdGF4IHJldHVybnMuIEJhc2VkIG9uIG91ciBwcmV2aW91cyBjb21tdW5pY2F0aW9uLCBpdCBhcHBlYXJzIHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBiZW5lZml0cyB0aGF0IG5lZWQgdG8gYmUgcmV2aWV3ZWQgZnVydGhlci4gVG8gYXNzaXN0IHlvdSBwcm9wZXJseSwgd2UgcmVxdWVzdCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRldGFpbHM6PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0IHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21wYW55IGNhcnMsIG1lbWJlcnNoaXBzLCBlZHVjYXRpb25hbCBhc3Npc3RhbmNlLCBldGMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIElmIHlvdSdyZSB1bnN1cmUsIHBsZWFzZSBwcm92aWRlIGFuIGVzdGltYXRlIGFuZCB0aGUgYmFzaXMgZm9yIHRoaXMgZXN0aW1hdGUuPC9saT5cclxuICA8bGk+PHN0cm9uZz5BbnkgYW1vdW50cyBjb250cmlidXRlZCBieSB5b3U6PC9zdHJvbmc+IElmIHlvdSBtYWRlIGNvbnRyaWJ1dGlvbnMgdG93YXJkIHRoZSBjb3N0IG9mIGFueSBiZW5lZml0LCBwbGVhc2Ugc3BlY2lmeSB0aGUgYW1vdW50cyBhbmQgZm9yIHdoaWNoIGJlbmVmaXRzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5EYXRlczo8L3N0cm9uZz4gVGhlIHBlcmlvZCBkdXJpbmcgd2hpY2ggeW91IHJlY2VpdmVkIHRoZXNlIGJlbmVmaXRzLiBJbmNsdWRlIHNwZWNpZmljIGRhdGVzIGlmIHBvc3NpYmxlLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgSW5mb3JtYXRpb246PC9zdHJvbmc+IFRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBlbXBsb3llcihzKSBwcm92aWRpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cclxuPC9vbD5cclxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHRoZSB0YXhhYmxlIHZhbHVlIG9mIHRoZXNlIGZyaW5nZSBiZW5lZml0cyBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk5vbiBUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZmluYWxpemluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgaWRlbnRpZmllZCBwb3RlbnRpYWwgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHRoYXQgbWF5IGFwcGx5IHRvIHlvdXIgc2l0dWF0aW9uLiBUbyBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBvdXRjb21lLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBhbnkgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHlvdSBtYXkgaGF2ZSByZWNlaXZlZDo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgbWF5IGluY2x1ZGUgaGVhbHRoIHNhdmluZ3MgYWNjb3VudHMgKEhTQXMpLCBlbXBsb3llZSBkaXNjb3VudHMsIHB1YmxpYyB0cmFuc2l0IHBhc3NlcywgZXRjLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlZhbHVlIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIChGTVYpIG9mIGVhY2ggYmVuZWZpdC4gRm9yIG5vbi10YXhhYmxlIGJlbmVmaXRzLCB0aGlzIGhlbHBzIGluIHJlY29yZC1rZWVwaW5nIGFuZCBjb25maXJtaW5nIGV4ZW1wdGlvbiBzdGF0dXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29udHJpYnV0aW9uIGFtb3VudHMsIGlmIGFueTo8L3N0cm9uZz4gSWYgeW91IGhhdmUgY29udHJpYnV0ZWQgdG93YXJkcyBhbnkgb2YgdGhlc2UgYmVuZWZpdHMsIGluZGljYXRlIHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBjb3Jyb2JvcmF0ZSB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgcmVjZWlwdDo8L3N0cm9uZz4gVGhlIHRpbWVmcmFtZSBkdXJpbmcgd2hpY2ggeW91IHJlY2VpdmVkIHRoZXNlIGJlbmVmaXRzLiBJbmNsdWRlIGFzIHByZWNpc2UgZGF0ZXMgYXMgcG9zc2libGUuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgb3IgcHJvdmlkZXIgaW5mb3JtYXRpb246PC9zdHJvbmc+IFRoZSBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGVtcGxveWVyKHMpIG9yIHRoaXJkLXBhcnR5IHByb3ZpZGVyKHMpIG9mZmVyaW5nIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+R2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24gaGVscHMgZW5zdXJlIHRoYXQgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIHRoYXQgeW91IHJlY2VpdmUgdGhlIGZ1bGwgYWR2YW50YWdlIG9mIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cy4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBuZWVkIGFueSBoZWxwIGlkZW50aWZ5aW5nIG9yIGRvY3VtZW50aW5nIHRoZXNlIGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGhpZ2hseSBhcHByZWNpYXRlZCBhcyB3ZSBzdHJpdmUgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gZWZmaWNpZW50bHkuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVmV0ZXJhbiBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVkEgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBBcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydCB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgVmV0ZXJhbiBCZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5UbyBhc3Npc3QgdXMgaW4gdGhpcyB0YXNrLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIHRoZSBWZXRlcmFuIEJlbmVmaXRzIHlvdSByZWNlaXZlZCwgaW5jbHVkaW5nIGFueSBkaXNhYmlsaXR5LCBlZHVjYXRpb24sIGFuZCBwZW5zaW9uIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPk9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggdHlwZSBvZiBiZW5lZml0IHJlY2VpdmVkLCBzdWNoIGFzIGF3YXJkIGxldHRlcnMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIFZldGVyYW5zIEFmZmFpcnMgKFZBKS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgY29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgVkEgb3Igb3RoZXIgcmVsZXZhbnQgZW50aXRpZXMgcmVnYXJkaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHlvdXIgYmVuZWZpdHMuPC9saT5cclxuICAgICAgICA8bGk+VG90YWwgYW1vdW50IHJlY2VpdmVkIGZvciBlYWNoIGJlbmVmaXQgdGhyb3VnaG91dCB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+QW55IG90aGVyIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBwcm92aWRlIGNsYXJpdHkgb24gdGhlIG5hdHVyZSBhbmQgYW1vdW50IG9mIHlvdXIgVmV0ZXJhbiBCZW5lZml0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggYmVuZWZpdHMgYXJlIHRheGFibGUgYW5kIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuIFBsZWFzZSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGlmZSBJbnN1cmFuY2UgUGF5bWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHlvdXIgbWVudGlvbiBvZiByZWNlaXZpbmcgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB0aGVzZSBwcm9jZWVkcyBhcmUgaW5kZWVkIG5vbi10YXhhYmxlLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHJlY2VpdmVkIGZyb20gbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBwZXJ0YWluaW5nIHRvIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50cy48L2xpPlxyXG4gICAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGluc3VyZWQgaW5kaXZpZHVhbCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdS48L2xpPlxyXG4gICAgICA8bGk+QW55IGNvbW11bmljYXRpb25zIG9yIGxldHRlcnMgZnJvbSB0aGUgaW5zdXJhbmNlIGNvbXBhbnkgcmVnYXJkaW5nIHRoZSB0YXggc3RhdHVzIG9mIHRoZXNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxzIHJlZ2FyZGluZyBpZiB0aGUgcG9saWN5IHdhcyBwdXJjaGFzZWQgd2l0aCBhZnRlci10YXggb3IgcHJlLXRheCBkb2xsYXJzLjwvbGk+XHJcbiAgICAgIDxsaT5JZiBhbnkgcG9ydGlvbiBvZiB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudCB3YXMgYW4gaW52ZXN0bWVudCByZXR1cm4sIHBsZWFzZSBwcm92aWRlIHJlbGF0ZWQgZG9jdW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBndWFyYW50ZWUgdGhlIGFjY3VyYWN5IGFuZCBpbnRlZ3JpdHkgb2YgeW91ciB0YXggcmV0dXJuLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBBcyB3ZSBwcm9jZWVkIHdpdGggcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHVuZGVyIHRoZSBkaWZmaWN1bHR5LW9mLWNhcmUgcHJvdmlzaW9ucyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgbWF4aW1pemUgeW91ciBlbGlnaWJsZSBpbmNvbWUgZXhjbHVzaW9ucywgaXQncyBjcnVjaWFsIHdlIHZlcmlmeSBjZXJ0YWluIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGxpdmluZyBhcnJhbmdlbWVudCwgYXMgcGVyIElSUyBndWlkZWxpbmVzLjwvcD5cclxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiBjb25maXJtaW5nIHRoYXQgdGhlc2UgcGF5bWVudHMgcXVhbGlmeSBmb3IgaW5jb21lIGV4Y2x1c2lvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmNlOjwvc3Ryb25nPiBEb2N1bWVudHMgcHJvdmluZyB0aGF0IHlvdSBhbmQgdGhlIGluZGl2aWR1YWwgdW5kZXIgY2FyZSBzaGFyZWQgdGhlIHNhbWUgcHJpbWFyeSByZXNpZGVuY2UgZHVyaW5nIHRoZSByZWNlaXB0IG9mIHRoZXNlIHBheW1lbnRzLiBUaGlzIGNvdWxkIGluY2x1ZGUgdXRpbGl0eSBiaWxscywgYSByZW50YWwgYWdyZWVtZW50LCBvciBob21lb3duZXIncyBpbnN1cmFuY2UgaW4gYm90aCBvZiB5b3VyIG5hbWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgQ2FyZSBSZWNpcGllbnQ6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJzb24gcmVjZWl2aW5nIGNhcmUsIGluY2x1ZGluZyB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91IGFuZCBhbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGlkZW50aWZpZXMgdGhlaXIgbmVlZCBmb3IgY2FyZSAoZS5nLiwgYSBsZXR0ZXIgZnJvbSBhIGhlYWx0aGNhcmUgcHJvdmlkZXIpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgcmVjb3JkcyBvZiB0aGUgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHlvdSByZWNlaXZlZCwgYXMgdGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBleGFjdCBhbW91bnRzIGFuZCB0aGUgcGVyaW9kcyBjb3ZlcmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IEZvcm1hbCBBZ3JlZW1lbnRzIG9yIENvbnRyYWN0czo8L3N0cm9uZz4gSWYgdGhlcmUgd2FzIGEgZm9ybWFsIGFncmVlbWVudCBvciBjb250cmFjdCBkZXRhaWxpbmcgdGhlIGNhcmUgcHJvdmlkZWQsIHBsZWFzZSBpbmNsdWRlIHRoaXMgYXMgd2VsbC4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBpZiB0aGUgY2FyZSBhcnJhbmdlbWVudCB3YXMgZmFjaWxpdGF0ZWQgdGhyb3VnaCBhIHN0YXRlIG9yIHRoaXJkLXBhcnR5IGFnZW5jeS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHdlIGNvbXBseSB3aXRoIHRheGluZyBhdXRob3JpdGllcyB3aGlsZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgeW91ciBmaW5hbmNlcy4gSWYgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cyBwb3NlIGEgZGlmZmljdWx0eSBvciBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyBhbmQgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGJlbmVmaXRzIGFyZSBlbGlnaWJsZSB0byBiZSBleGNsdWRlZCBmcm9tIHlvdXIgaW5jb21lLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkLjwvcD5cclxuICAgIDxwPktpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gc2hvd2luZyB0aGUgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+Q29uZmlybWF0aW9uIG9uIHdobyBwYWlkIHRoZSBpbnN1cmFuY2UgcHJlbWl1bXMgKHlvdSBvciB5b3VyIGVtcGxveWVyKS48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHlvdSBwYWlkIHRvd2FyZHMgdGhlIHByZW1pdW1zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IHN1cHBvcnRpbmcgZG9jdW1lbnRzIGZvciB0aGUgcGF5bWVudHMgbWFkZSBieSB5b3UgKHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cykuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5JZiB5b3VyIGVtcGxveWVyIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgcGFpZCBieSB5b3VyIGVtcGxveWVyIHRvd2FyZHMgdGhlIHByZW1pdW1zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50cyBpbmRpY2F0aW5nIGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgKHBheSBzdHVicywgZW1wbG95ZXIgbGV0dGVycykuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZGV0ZXJtaW5lIHRoZSB0YXhhYmxlIHBvcnRpb24sIGlmIGFueSwgb2YgeW91ciBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cy4gUHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggZmlsaW5nIGFuZCBwb3RlbnRpYWxseSBsb3dlciB5b3VyIHRheGFibGUgaW5jb21lLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgaWYgd2UgY2FuIGJlIG9mIGZ1cnRoZXIgYXNzaXN0YW5jZS4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc2FiaWxpdHkgUmV0aXJlbWVudCBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gSW4gb3JkZXIgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIG5lZWQgYWRkaXRpb25hbCBkZXRhaWxzLiBUaGUgdGF4YWJpbGl0eSBvZiB0aGVzZSBiZW5lZml0cyBjYW4gZGVwZW5kIG9uIHdoZW4geW91IHRvb2sgcmV0aXJlbWVudCBkdWUgdG8gZGlzYWJpbGl0eS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGU6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUmV0aXJlbWVudDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgeW91IHJldGlyZWQgZHVlIHRvIGRpc2FiaWxpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIERpc2FiaWxpdHkgUmV0aXJlbWVudDo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24geW91IGhhdmUgdGhhdCBjb25maXJtcyB5b3VyIHJldGlyZW1lbnQgd2FzIGR1ZSB0byBkaXNhYmlsaXR5LiBUaGlzIG1heSBpbmNsdWRlIGxldHRlcnMgZnJvbSB5b3VyIGVtcGxveWVyLCB0aGUgcmV0aXJlbWVudCBwbGFuLCBvciBtZWRpY2FsIHJlY29yZHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBTcGVjaWZpYyBhbW91bnRzIGFuZCB0aGUgc291cmNlIG9mIHRoZSBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMuIFBsZWFzZSBpbmNsdWRlIGFueSByZWxhdGVkIGRvY3VtZW50cyBzdWNoIGFzIHN0YXRlbWVudHMgb3Igbm90aWNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXIgVy0yIG9yIDEwOTkgRm9ybXM6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBhbnkgd2FnZXMgb3IgZGlzYWJpbGl0eSBwYXltZW50cyB0aGF0IHdlcmUgcmVwb3J0ZWQgb24gVy0yIG9yIDEwOTkgZm9ybXMgaW4gdGhlIHllYXIgb2YgeW91ciByZXRpcmVtZW50LCBwbGVhc2UgcHJvdmlkZSB0aGVzZSBmb3Jtcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBDb3JyZXNwb25kZW5jZSBmcm9tIHRoZSBJUlM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIHJlY2VpdmVkIGFueSBub3RpY2VzIG9yIGxldHRlcnMgZnJvbSB0aGUgSVJTIHJlZ2FyZGluZyB5b3VyIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cywgcGxlYXNlIGluY2x1ZGUgY29waWVzIG9mIHRoZXNlIGNvbW11bmljYXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlIGFib3ZlIGluZm9ybWF0aW9uIGlzIHZpdGFsIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgeW91ciBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMgd2lsbCBhaWQgdXMgaW4gZGV0ZXJtaW5pbmcgdGhlaXIgdGF4YWJpbGl0eSBhbmQgZW5zdXJpbmcgdGhhdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhcmUgcHJlY2lzZWx5IGNhbGN1bGF0ZWQuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGhpZ2hseSBhcHByZWNpYXRlZC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2xlcmd5IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDbGVyZ3kgV2FnZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBXLTIgd2FnZXMgYXMgYSBjbGVyZ3kgbWVtYmVyLiBUbyBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCB0byBwb3RlbnRpYWxseSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2UgcmVxdWlyZSBmdXJ0aGVyIGRldGFpbHMgcmVnYXJkaW5nIHlvdXIgY29tcGVuc2F0aW9uIHBhY2thZ2UuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5XLTIgRm9ybTo8L2I+IElmIG5vdCBhbHJlYWR5IHByb3ZpZGVkLCBpbmNsdWRlIGFueSBXLTIgZm9ybXMgaXNzdWVkIGJ5IHlvdXIgcmVsaWdpb3VzIGluc3RpdHV0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkhvdXNpbmcgQWxsb3dhbmNlIERvY3VtZW50YXRpb246PC9iPiBEZXRhaWxlZCBzdGF0ZW1lbnQgb3IgbGV0dGVyIGZyb20geW91ciByZWxpZ2lvdXMgaW5zdGl0dXRpb24gc3BlY2lmeWluZyB0aGUgYW1vdW50IGRlc2lnbmF0ZWQgYXMgaG91c2luZyBhbGxvd2FuY2UuPC9saT5cclxuICAgICAgICA8bGk+PGI+U2VsZi1FbXBsb3ltZW50IFRheDo8L2I+IENvbmZpcm1hdGlvbiBvbiB3aGV0aGVyIHlvdSBoYXZlIHRha2VuIGEgdm93IG9mIHBvdmVydHkgKGlmIGFwcGxpY2FibGUpLCBvciBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIG9wdGluZyBvdXQgb2Ygc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5FeHBlbnNlIFJlaW1idXJzZW1lbnRzOjwvYj4gRG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBleHBlbnNlIHJlaW1idXJzZW1lbnRzIHJlY2VpdmVkIHVuZGVyIGFuIGFjY291bnRhYmxlIHBsYW4uPC9saT5cclxuICAgICAgICA8bGk+PGI+T3RoZXIgQ29tcGVuc2F0aW9uOjwvYj4gSW5mb3JtYXRpb24gb24gYW55IG90aGVyIGNvbXBlbnNhdGlvbiByZWNlaXZlZCBpbiB5b3VyIGNhcGFjaXR5IGFzIGNsZXJneSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3ZlIG9mZmVyaW5ncywgZmVlcyBmb3Igc2VydmljZXMgKHdlZGRpbmdzLCBmdW5lcmFscywgZXRjLiksIGFuZCBwYXJzb25hZ2UgYWxsb3dhbmNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gYWNjdXJhdGVseSByZXByZXNlbnQgeW91ciBlYXJuaW5ncyBhbmQgdG8gY2FsY3VsYXRlIGFueSBwb3RlbnRpYWwgZGVkdWN0aW9ucyBjb3JyZWN0bHkuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybnMgYXJlIHByZXBhcmVkIGluIGEgdGltZWx5IGFuZCBlZmZpY2llbnQgbWFubmVyLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGlzIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnRlcmVzdCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkludGVyZXN0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+SW4gcmV2aWV3aW5nIHlvdXIgZmluYW5jaWFsIGFjdGl2aXRpZXMgZm9yIHRoZSB0YXggeWVhciwgeW91IGluZGljYXRlZCByZWNlaXZpbmcgaW50ZXJlc3QgaW5jb21lLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4YWJpbGl0eSBvZiB0aGlzIGluY29tZSBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBkZXRhaWxzLiBLaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxiPlNvdXJjZSBvZiBJbnRlcmVzdCBJbmNvbWU6PC9iPiBQbGVhc2Ugc3BlY2lmeSB0aGUgaW5zdGl0dXRpb24ocykgb3IgZW50aXR5KGllcykgZnJvbSB3aGljaCB5b3UgcmVjZWl2ZWQgaW50ZXJlc3QgaW5jb21lIChlLmcuLCBiYW5rcywgY3JlZGl0IHVuaW9ucykuPC9saT5cclxuICAgICAgPGxpPjxiPkFtb3VudCBSZWNlaXZlZDo8L2I+IENvbmZpcm0gdGhlIHRvdGFsIGFtb3VudCBvZiBpbnRlcmVzdCBpbmNvbWUgcmVjZWl2ZWQgZnJvbSBlYWNoIHNvdXJjZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5BY2NvdW50IFR5cGVzOjwvYj4gSWRlbnRpZnkgdGhlIHR5cGUgb2YgYWNjb3VudHMgdGhhdCBnZW5lcmF0ZWQgdGhlIGludGVyZXN0IChlLmcuLCBzYXZpbmdzLCBjaGVja2luZywgY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQpLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5UYXggRm9ybXMgUmVjZWl2ZWQ6PC9iPiBMaXN0IGFueSB0YXggZm9ybXMgeW91IGhhdmUgcmVjZWl2ZWQgcmVsYXRlZCB0byBpbnRlcmVzdCBpbmNvbWUsIHN1Y2ggYXMgRm9ybSAxMDk5LUlOVCBvciBGb3JtIDEwOTktT0lELjwvbGk+XHJcbiAgICAgIDxsaT48Yj5Gb3JlaWduIEludGVyZXN0OjwvYj4gSWYgYW55IGludGVyZXN0IGluY29tZSB3YXMgZWFybmVkIGZyb20gZm9yZWlnbiBhY2NvdW50cyBvciBzb3VyY2VzLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxzLCBpbmNsdWRpbmcgdGhlIGNvdW50cnkgb2Ygb3JpZ2luLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgeW91ciBpbnRlcmVzdCBpbmNvbWUgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGNvcnJlY3QuIFlvdSBjYW4gYXR0YWNoIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBieSByZXBseWluZyB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZGluZyB0aGVtIGRpcmVjdGx5IHRvIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJCYW5rIEFjY291bnQgT3BlbmluZyBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJldmlld2luZyB5b3VyIHRheCBzaXR1YXRpb24gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgYSBnaWZ0IGZvciBvcGVuaW5nIGFuIGFjY291bnQgYXQgYSBmaW5hbmNpYWwgaW5zdGl0dXRpb24uIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiB3aGVyZSB0aGUgYWNjb3VudCB3YXMgb3BlbmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBkYXRlIHRoZSBhY2NvdW50IHdhcyBvcGVuZWQuPC9saT5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZ2lmdCByZWNlaXZlZCAoZS5nLiwgY2FzaCwgbWVyY2hhbmRpc2UsIG9yIHNlcnZpY2VzKS48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgdGhlIGdpZnQgYXQgdGhlIHRpbWUgaXQgd2FzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gcmVnYXJkaW5nIHRoZSBnaWZ0IChlLmcuLCBhIGxldHRlciwgZW1haWwgY29uZmlybWF0aW9uLCBvciBzdGF0ZW1lbnQgaW5kaWNhdGluZyB0aGUgdmFsdWUgb2YgdGhlIGdpZnQpLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBpZiB5b3UgaGF2ZSByZWNlaXZlZCBtb3JlIHRoYW4gb25lIGdpZnQgZm9yIG9wZW5pbmcgYWNjb3VudHMgd2l0aGluIHRoZSBzYW1lIHRheCB5ZWFyLCBhbmQgaWYgc28sIHRoZSBkZXRhaWxzIGZvciBlYWNoLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGNvbXBseSB3aXRoIGFsbCBJUlMgcmVxdWlyZW1lbnRzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDRCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ0QgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgb2YgeW91ciBpbmNvbWUgZnJvbSBDZXJ0aWZpY2F0ZXMgb2YgRGVwb3NpdCAoQ0RzKSBmb3IgdGhlIHRheCB5ZWFyLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCB0byBjb21wbHkgd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIHRvIHBvdGVudGlhbGx5IG9wdGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5OYW1lIG9mIHRoZSBCYW5rIG9yIEZpbmFuY2lhbCBJbnN0aXR1dGlvbjo8L3N0cm9uZz4gV2hlcmUgdGhlIENEIGlzIGhlbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BY2NvdW50IE51bWJlcjo8L3N0cm9uZz4gVGhpcyBoZWxwcyBpbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgQ0QuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBJbnRlcmVzdCBFYXJuZWQ6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgaW50ZXJlc3QgZWFybmVkIGZyb20gdGhlIENEIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5DRCBUZXJtOjwvc3Ryb25nPiBUaGUgZHVyYXRpb24gb3IgdGVybSBvZiB0aGUgQ0QgKGUuZy4sIDYgbW9udGhzLCAxIHllYXIpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBQdXJjaGFzZTo8L3N0cm9uZz4gV2hlbiB5b3Ugb3JpZ2luYWxseSBhY3F1aXJlZCB0aGUgQ0QuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYXR1cml0eSBEYXRlOjwvc3Ryb25nPiBXaGVuIHRoZSBDRCByZWFjaGVkIG9yIHdpbGwgcmVhY2ggaXRzIGZ1bGwgdGVybS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPjEwOTktSU5UIEZvcm1zOjwvc3Ryb25nPiBJZiByZWNlaXZlZCwgcGxlYXNlIGluY2x1ZGUgY29waWVzIG9mIGFueSAxMDk5LUlOVCBmb3JtcyBhc3NvY2lhdGVkIHdpdGggdGhlIENEIGludGVyZXN0LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gWW91IG1heSB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBwcm92aWRlIHRoZW0gdmlhIGVtYWlsLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgdGF4LWV4ZW1wdCBpbnRlcmVzdCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBwb3NzaWJseSBmcm9tIG11bmljaXBhbCBib25kcyBvciBzaW1pbGFyIGludmVzdG1lbnRzLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudHMgb2YgVGF4LUV4ZW1wdCBJbnRlcmVzdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIDEwOTktSU5UIGZvcm1zIG9yIGVxdWl2YWxlbnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB5b3VyIHRheC1leGVtcHQgaW50ZXJlc3QgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIElzc3VpbmcgRW50aXRpZXM6PC9zdHJvbmc+IEEgbGlzdCBvciBzdGF0ZW1lbnQgaWRlbnRpZnlpbmcgdGhlIGVudGl0aWVzIHRoYXQgaXNzdWVkIHRoZSBib25kcyBvciBzaW1pbGFyIGludmVzdG1lbnRzLiBUaGlzIGluY2x1ZGVzIG11bmljaXBhbCwgc3RhdGUsIG9yIGZlZGVyYWwgZW50aXRpZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IERldGFpbDo8L3N0cm9uZz4gQSBicmVha2Rvd24gb2YgdGhlIGludmVzdG1lbnRzIGNvbnRyaWJ1dGluZyB0byB0YXgtZXhlbXB0IGludGVyZXN0LiBUaGlzIHNob3VsZCBpbmNsdWRlIHRoZSBwdXJjaGFzZSBkYXRlLCBwdXJjaGFzZSBhbW91bnRzLCBhbmQgYW55IHJlbGF0ZWQgbWF0dXJpdHkgZGF0ZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ccm9rZXJhZ2UgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBicm9rZXJhZ2UgYWNjb3VudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHRyYW5zYWN0aW9ucyBhbmQgaG9sZGluZ3MgaW4gdGF4LWV4ZW1wdCBpbnZlc3RtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFNVCAoQWx0ZXJuYXRpdmUgTWluaW11bSBUYXgpIENvbnNpZGVyYXRpb246PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgZG9jdW1lbnRhdGlvbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW55IG9mIHRoZSB0YXgtZXhlbXB0IGludGVyZXN0IGlzIHN1YmplY3QgdG8gdGhlIEFsdGVybmF0aXZlIE1pbmltdW0gVGF4LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbiBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIGNvbnRpbnVlZCBlZmZvcnQgdG8gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZXMsIHdlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGludGVyZXN0IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBmcm9tIHJlZGVlbWluZyBhbiBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9wPlxyXG5cclxuICAgIDxwPlRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBlbGlnaWJpbGl0eSBmb3IgZXhlbXB0aW9uIGFuZCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBJUlMsIHdlIGtpbmRseSByZXF1ZXN0IHlvdSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgRm9ybSAxMDk5LUlOVCBvciBzaW1pbGFyIHN0YXRlbWVudCBwcm92aWRlZCBieSB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uLCBpbmRpY2F0aW5nIHRoZSBhbW91bnQgb2YgaW50ZXJlc3QgcmVjZWl2ZWQgZnJvbSB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHJlY29yZHMgb2YgdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZHMgcmVkZWVtZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Qm9uZCBzZXJpYWwgbnVtYmVyczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SXNzdWUgZGF0ZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlJlZGVtcHRpb24gZGF0ZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHM8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gZm9yIHF1YWxpZmllZCBlZHVjYXRpb25hbCBleHBlbnNlcyBwYWlkIGR1cmluZyB0aGUgeWVhciwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VHVpdGlvbiBhbmQgZmVlczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q291cnNlIG1hdGVyaWFsczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIHJlcXVpcmVkIGV4cGVuc2VzIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UgYXQgYW4gZWxpZ2libGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb248L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIGVucm9sbG1lbnQgZnJvbSBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBmb3IgdGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSBib25kLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4YWJpbGl0eSBvZiB0aGUgaW50ZXJlc3QgaW5jb21lIGFuZCBwb3RlbnRpYWxseSBtYXhpbWl6aW5nIHlvdXIgdGF4IGJlbmVmaXRzLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIHJlY29tbWVuZCBjb21waWxpbmcgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXZpZGVuZCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpdmlkZW5kIEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpdmlkZW5kIGluY29tZSBvdmVyIHRoZSBwYXN0IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmNvbWUgYW5kIG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BbGwgMTA5OS1ESVYgZm9ybXMgcmVjZWl2ZWQgZnJvbSBjb3Jwb3JhdGlvbnMgb3IgbXV0dWFsIGZ1bmRzLiBUaGlzIGluY2x1ZGVzIGRpc3RyaWJ1dGlvbnMgb2YgY2FzaCwgc3RvY2ssIG9yIG90aGVyIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgZm9yZWlnbiBkaXZpZGVuZHMgaW5jbHVkaW5nIHRoZSBhbW91bnQgaW4gZm9yZWlnbiBjdXJyZW5jeSwgdGhlIGNvdW50cnkgb2Ygb3JpZ2luLCBhbmQgYW55IGZvcmVpZ24gdGF4IHBhaWQuPC9saT5cclxuICAgICAgPGxpPkZvciBkaXZpZGVuZHMgcmVpbnZlc3RlZCwgcGxlYXNlIHByb3ZpZGUgc3RhdGVtZW50cyBvciBjb25maXJtYXRpb25zIHNob3dpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgIDxsaT5Bbnkgb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgZGl2aWRlbmRzIG5vdCBjb3ZlcmVkIGJ5IGEgMTA5OS1ESVYuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlIHRvIGF2b2lkIGFueSBwcm9jZXNzaW5nIGRlbGF5cy48L3A+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSBpcyBhcHByZWNpYXRlZCBhcyBpdCB3aWxsIGhlbHAgdXMgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbnMgZWZmaWNpZW50bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzcG9zZWQgQ2FwaXRhbCBBc3NldHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBkaXNwb3Npbmcgb2YgY2FwaXRhbCBhc3NldHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBjb21wbGV0ZSBhbmQgY29tcGxpYW50LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5EZXNjcmlwdGlvbiBvZiBlYWNoIGRpc3Bvc2VkIGFzc2V0OjwvYj4gSW5jbHVkZSB0aGUgdHlwZSBvZiBhc3NldCAoZS5nLiwgcmVhbCBlc3RhdGUsIHN0b2NrcywgYm9uZHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgYWNxdWlzaXRpb246PC9iPiBUaGUgcHVyY2hhc2UgZGF0ZSBvciB0aGUgZGF0ZSB5b3Ugb3JpZ2luYWxseSBjYW1lIGludG8gcG9zc2Vzc2lvbiBvZiBlYWNoIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkFjcXVpc2l0aW9uIGNvc3Q6PC9iPiBUaGUgb3JpZ2luYWwgcHVyY2hhc2UgcHJpY2Ugb3IgY29zdCBiYXNpcyBvZiBlYWNoIGFzc2V0LCBpbmNsdWRpbmcgYW55IGltcHJvdmVtZW50cyBtYWRlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgZGlzcG9zYWw6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLCBleGNoYW5nZWQsIG9yIG90aGVyd2lzZSBkaXNwb3NlZCBvZi48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5TYWxlIG9yIGRpc3Bvc2FsIHByb2NlZWRzOjwvYj4gVGhlIHRvdGFsIGFtb3VudCByZWNlaXZlZCBmcm9tIHRoZSBkaXNwb3NhbCBvZiB0aGUgYXNzZXQuPC9saT5cclxuICAgICAgICA8bGk+PGI+QXNzb2NpYXRlZCBleHBlbnNlczo8L2I+IEFueSBjb3N0cyBpbmN1cnJlZCBkaXJlY3RseSBmcm9tIHRoZSBzYWxlIG9yIGRpc3Bvc2FsIHByb2Nlc3MsIHN1Y2ggYXMgYnJva2VyJ3MgZmVlcywgYWR2ZXJ0aXNpbmcsIGxlZ2FsIGZlZXMsIGV0Yy48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5SZWFzb24gZm9yIGRpc3Bvc2FsOjwvYj4gQnJpZWZseSBkZXNjcmliZSB0aGUgcmVhc29uIGJlaGluZCB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBjYWxjdWxhdGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMgYW5kIGRldGVybWluaW5nIHRoZWlyIGltcGFjdCBvbiB5b3VyIHRheCBvYmxpZ2F0aW9ucy4gUGxlYXNlIGF0dGFjaCBhbnkgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIHNhbGVzIHJlY2VpcHRzLCBkZWVkcywgY29udHJhY3RzLCBvciBicm9rZXJhZ2Ugc3RhdGVtZW50cywgdG8gc3Vic3RhbnRpYXRlIHRoZSBkZXRhaWxzIHByb3ZpZGVkLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtYXkgaGF2ZS4gWW91IGNhbiByZWFjaCB1cyB2aWEgZW1haWwgb3IgcGhvbmUgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk11dHVhbCBGdW5kIEdhaW5cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIEdhaW5cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIG9yZGVyIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgb24geW91ciB0YXggcmV0dXJuLCBhcyBwZXIgeW91ciBpbmRpY2F0aW9uIG9mIHJlY2VpdmluZyBnYWlucyBmcm9tIGEgbXV0dWFsIGZ1bmQgb3Igc2ltaWxhciBpbnZlc3RtZW50LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LURJViBGb3JtOjwvc3Ryb25nPiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9uIGRpdmlkZW5kcyBhbmQgZGlzdHJpYnV0aW9ucyB5b3UgcmVjZWl2ZWQgZnJvbSB5b3VyIG11dHVhbCBmdW5kIGludmVzdG1lbnRzLiBQbGVhc2UgZW5zdXJlIHRvIHByb3ZpZGUgdGhpcyBmb3JtIGlmIHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgd2VyZSByZXBvcnRlZCBvbiBpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudCBvZiBBY2NvdW50Ojwvc3Ryb25nPiBUaGlzIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGFsbCB0cmFuc2FjdGlvbnMgd2l0aGluIHlvdXIgYWNjb3VudCwgaW5jbHVkaW5nIHB1cmNoYXNlcywgcmVkZW1wdGlvbnMsIGFuZCByZWludmVzdGVkIGRpdmlkZW5kcyB3aGljaCBoZWxwIHVzIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgeW91ciBnYWlucy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlllYXItRW5kIFN1bW1hcnk6PC9zdHJvbmc+IE9mdGVuIG11dHVhbCBmdW5kcyBwcm92aWRlIGEgeWVhci1lbmQgc3VtbWFyeSB0byB0aGVpciBpbnZlc3RvcnMuIFRoaXMgc3VtbWFyeSBjYW4gYmUgdmVyeSBoZWxwZnVsIGluIHByZXBhcmluZyB5b3VyIHRheGVzIGFzIGl0IGNvbnNvbGlkYXRlcyBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50czo8L3N0cm9uZz4gVGhpcyBjb3VsZCBpbmNsdWRlIGFkZGl0aW9uYWwgMTA5OSBmb3JtcyAobGlrZSAxMDk5LUIgaWYgYW55IHNhbGVzIG9jY3VycmVkKSwgb3JpZ2luYWwgaW52ZXN0bWVudCBzdGF0ZW1lbnRzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4IHNpdHVhdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPldlIHVuZGVyc3RhbmQgdGhhdCBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzIG1heSByZXF1aXJlIHNvbWUgdGltZSwgaG93ZXZlciwgaGF2aW5nIHRoZXNlIHJlYWRpbHkgYXZhaWxhYmxlIHdpbGwgZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgZWZmaWNpZW5jeSBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBkaWZmaWN1bHRpZXMgb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBEaXNwb3NhbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTXV0dWFsIEZ1bmQgRGlzcG9zYWxcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgbWFkZSBhIGRpc3Bvc2FsIG9mIHNoYXJlcyBpbiBhIG11dHVhbCBmdW5kIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlZCBhY2N1cmF0ZWx5LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz4xMDk5LUIgZm9ybTwvc3Ryb25nPiBhc3NvY2lhdGVkIHdpdGggdGhlIG11dHVhbCBmdW5kIGRpc3Bvc2FsLCBpZiBhdmFpbGFibGUuIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgZGV0YWlscyBvbiB0aGUgc2FsZSBvZiB5b3VyIHNoYXJlcy48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCA8c3Ryb25nPnJlY29yZCBvZiB0aGUgcHVyY2hhc2U8L3N0cm9uZz4gb2YgdGhlIG11dHVhbCBmdW5kIHNoYXJlcyBpbmNsdWRpbmcgdGhlIHB1cmNoYXNlIGRhdGUgYW5kIGNvc3QgYmFzaXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgY2FsY3VsYXRpbmcgYW55IGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIHRoZSAxMDk5LUIgZm9ybSBpcyBub3QgYXZhaWxhYmxlLCBwbGVhc2UgcHJvdmlkZSBhbnkgPHN0cm9uZz5icm9rZXJhZ2Ugc3RhdGVtZW50czwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvd3MgdGhlIGRpc3Bvc2FsIG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMsIGluY2x1ZGluZyB0aGUgc2FsZSBkYXRlIGFuZCBhbW91bnQuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgPHN0cm9uZz5yZWludmVzdGVkIGRpdmlkZW5kczwvc3Ryb25nPiBvciBjYXBpdGFsIGdhaW5zIGRpc3RyaWJ1dGlvbnMsIGFzIHRoZXNlIGNhbiBhZGp1c3QgeW91ciBjb3N0IGJhc2lzIGFuZCBhZmZlY3QgdGhlIGNhbGN1bGF0aW9uIG9mIHlvdXIgY2FwaXRhbCBnYWluIG9yIGxvc3MuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5IYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlIGRpc3Bvc2FsIG9mIHlvdXIgbXV0dWFsIGZ1bmQgc2hhcmVzIGFuZCBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLiBUaGlzIHdpbGwgYWxzbyBoZWxwIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGxpYWJpbGl0eSBmb3IgdGhlIHllYXIuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgYWJvdXQgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJXYXNoIFNhbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIldhc2ggU2FsZSBUcmFuc2FjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGluZGljYXRpb24gb2YgYSBwb3NzaWJsZSBXYXNoIFNhbGUgdHJhbnNhY3Rpb24uIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgdHJhbnNhY3Rpb24gcmVjb3Jkczwvc3Ryb25nPiAtIFBsZWFzZSBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHRoZSBzZWN1cml0eSB0aGF0IHdhcyBzb2xkIGFuZCB0aGVuIHJlcHVyY2hhc2VkLCBpbmNsdWRpbmcgZGF0ZXMgYW5kIGFtb3VudHMgZm9yIGVhY2ggdHJhbnNhY3Rpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IGJhc2lzIGZvciByZXB1cmNoYXNlZCBzZWN1cml0eTwvc3Ryb25nPiAtIERldGFpbHMgb2YgdGhlIGNvc3QgYmFzaXMgZm9yIHRoZSBzZWN1cml0aWVzIHJlcHVyY2hhc2VkIHdpdGhpbiBhIDYxLWRheSB3aW5kb3cgKDMwIGRheXMgYmVmb3JlIHRvIDMwIGRheXMgYWZ0ZXIgdGhlIHNhbGUpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBzdGF0ZW1lbnRzPC9zdHJvbmc+IC0gQ29waWVzIG9mIHlvdXIgYnJva2VyYWdlIGFjY291bnQgc3RhdGVtZW50cyBzaG93aW5nIHRoZSB0cmFuc2FjdGlvbnMgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Mb3NzZXMgcmVhbGl6ZWQ8L3N0cm9uZz4gLSBEb2N1bWVudGF0aW9uIG9mIGFueSBsb3NzZXMgcmVhbGl6ZWQgZnJvbSB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgY29ycmVzcG9uZGVuY2U8L3N0cm9uZz4gLSBDb3JyZXNwb25kZW5jZSBmcm9tIGJyb2tlcnMgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRvY3VtZW50cyBhcmUgb3JnYW5pemVkIGFuZCBjbGVhcmx5IGxhYmVsZWQgZm9yIGVhY2ggdHJhbnNhY3Rpb24uIFRoaXMgd2lsbCBmYWNpbGl0YXRlIGEgc21vb3RoZXIgYW5kIHF1aWNrZXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgV2FzaCBTYWxlIHRyYW5zYWN0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIHByb3ZpZGUgYWNjdXJhdGUgdGF4IGFkdmljZSBhbmQgcHJlcGFyYXRpb24uIEZ1cnRoZXIsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBhc3Npc3QgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSBXYXNoIFNhbGUgcnVsZSBhZmZlY3RzIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIGFueSBsb3NzZXMgeW91IG1pZ2h0IGhhdmUgaW5jdXJyZWQuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGVuc3VyZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBmaWxpbmdzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29sZCBIb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTb2xkIEhvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBzb2xkIGEgcGVyc29uYWwgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgY2xvc2luZyBkYXRlIHdoZW4gdGhlIHNhbGUgd2FzIG9mZmljaWFsbHkgY29tcGxldGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U2FsZSBQcmljZTo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCB5b3UgcmVjZWl2ZWQgZm9yIHRoZSBob21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpczo8L3N0cm9uZz4gT3JpZ2luYWwgcHVyY2hhc2UgcHJpY2UsIHBsdXMgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBob21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gQWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1haW4gUmVzaWRlbmNlIG9yIE5vdDo8L3N0cm9uZz4gUGxlYXNlIGNvbmZpcm0gaWYgdGhpcyB3YXMgeW91ciBtYWluIHJlc2lkZW5jZSBmb3IgYXQgbGVhc3QgdHdvIG9mIHRoZSBsYXN0IGZpdmUgeWVhcnMgcHJpb3IgdG8gdGhlIHNhbGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWNvcmRzIG9mIEhvbWUgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciByZWNvcmRzIG9mIGFueSBtYWpvciBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcHJvcGVydHksIHdoaWNoIGNhbiBhZmZlY3QgdGhlIGNvc3QgYmFzaXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBVc2U6PC9zdHJvbmc+IElmIG5vdCBhbHdheXMgdXNlZCBhcyBhIHBlcnNvbmFsIGhvbWUsIGRldGFpbHMgb24gYW55IHVzZSBvZiB0aGUgcHJvcGVydHkgZm9yIHJlbnRhbCwgYnVzaW5lc3MsIG9yIG90aGVyIG5vbi1wZXJzb25hbCB1c2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBBbnkgY29zdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYWxlLCBzdWNoIGFzIGxlZ2FsIGZlZXMsIHJlYWwgZXN0YXRlIGFnZW50IGNvbW1pc3Npb25zLCBhbmQgaG9tZSBzdGFnaW5nIGV4cGVuc2VzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkluc3RhbGxtZW50IFNhbGUgUGF5bWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkluc3RhbGxtZW50IFNhbGUgUGF5bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIHNvbGQgcHJvcGVydHkgdGhpcyB5ZWFyIHVuZGVyIGFuIGluc3RhbGxtZW50IHBsYW4uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgdHJhbnNhY3Rpb24gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgQWdyZWVtZW50Ojwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIGNvbXBsZXRlIHNhbGUgYWdyZWVtZW50IGRldGFpbGluZyB0aGUgdGVybXMgb2YgdGhlIGluc3RhbGxtZW50IHNhbGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZCAoZS5nLiwgbGFuZCwgYnVpbGRpbmcsIGVxdWlwbWVudCkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFNjaGVkdWxlOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiB0aGUgcGF5bWVudCBzY2hlZHVsZSBhZ3JlZWQgdXBvbiwgaW5jbHVkaW5nIHRoZSBkYXRlcyBhbmQgYW1vdW50cyBvZiBlYWNoIGluc3RhbGxtZW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW1vdW50cyBSZWNlaXZlZDo8L3N0cm9uZz4gVG90YWwgYW1vdW50cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgZG93biBwYXltZW50IGFuZCBhbnkgaW5zdGFsbG1lbnQgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmluY2lwYWwgJmFtcDsgSW50ZXJlc3QgQnJlYWtkb3duOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgYW1vdW50cyByZWNlaXZlZCBiZXR3ZWVuIHByaW5jaXBhbCBhbmQgaW50ZXJlc3QgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IEJhc2lzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHJlZ2FyZGluZyB0aGUgcHJvcGVydHkncyBvcmlnaW5hbCBjb3N0LCBpbXByb3ZlbWVudHMgbWFkZSwgYW5kIGFueSBkZXByZWNpYXRpb24gdGFrZW4gaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IHJlbGV2YW50IGV4cGVuc2VzIGluIHJlbGF0aW9uIHRvIHRoZSBzYWxlIHRoYXQgbWlnaHQgYmUgZGVkdWN0aWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJ1eWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBMZWdhbCBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGJ1eWVyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIGFueSBwcm9maXQgb3IgbG9zcyBmcm9tIHRoZSBzYWxlIGFuZCBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCB0YXggaW1wbGljYXRpb25zIG9mIHRoZSBpbnN0YWxsbWVudCBwYXltZW50cyByZWNlaXZlZC48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBlbWFpbCB0aGVtIHRvIHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbS48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIldvcnRobGVzcyBTZWN1cml0aWVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgeW91IGluZGljYXRlZCB0aGF0IHlvdSBoYXZlIGhhZCBpbnZlc3RtZW50cywgc3VjaCBhcyBzdG9ja3Mgb3IgYm9uZHMsIHRoYXQgYmVjYW1lIGNvbXBsZXRlbHkgd29ydGhsZXNzIHRoaXMgeWVhciwgd2UgbmVlZCB0byBnYXRoZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVwb3J0IHRoZXNlIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgU2VjdXJpdHk6PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgdHlwZSBvZiBlYWNoIHNlY3VyaXR5IHRoYXQgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlB1cmNoYXNlIERldGFpbHM6PC9zdHJvbmc+IERhdGUgb2YgcHVyY2hhc2UgYW5kIHRoZSBwdXJjaGFzZSBwcmljZSBmb3IgZWFjaCBzZWN1cml0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPldvcnRobGVzc25lc3MgRGV0ZXJtaW5hdGlvbiBEYXRlOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSB3aGVuIHlvdSBkZXRlcm1pbmVkIHRoZSBzZWN1cml0eSB0byBiZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgcmVjZWl2ZWQgb3IgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCB0aGUgaW52ZXN0bWVudHMgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkF0dGVtcHRzIHRvIFNlbGwgb3IgVHJhZGU6PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgYW55IGF0dGVtcHRzIG1hZGUgdG8gc2VsbCBvciB0cmFkZSB0aGUgc2VjdXJpdGllcyBiZWZvcmUgZGV0ZXJtaW5pbmcgdGhleSB3ZXJlIHdvcnRobGVzcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBpbnZlc3RtZW50IGFjY291bnQgc3RhdGVtZW50cyBzaG93aW5nIHRoZSB3b3J0aGxlc3Mgc2VjdXJpdGllcyBhbmQgdGhlaXIgdmFsdWUgb3ZlciB0aW1lLCBsZWFkaW5nIHVwIHRvIHRoZWlyIGRlY2xhcmVkIHdvcnRobGVzc25lc3MuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGFjY3VyYXRlIGFuZCB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMjQ0IEJ1c2luZXNzIFN0b2NrXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIHNhbGUgb2Ygc2hhcmVzIGluIGEgc21hbGwgYnVzaW5lc3Mgd2hlcmUgeW91IHdlcmUgYW4gb3JpZ2luYWwgaW52ZXN0b3IuIEFzIHlvdSBpbmRpY2F0ZWQgYSBsb3NzIG9uIHRoaXMgaW52ZXN0bWVudCwgaXQncyBjcnVjaWFsIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBxdWFsaWZpZXMgZm9yIHNwZWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQuIFRvIGFjY3VyYXRlbHkgYW5hbHl6ZSBhbmQgcmVwb3J0IHRoZXNlIGFjdGl2aXRpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz5jZXJ0aWZpY2F0ZSBvZiBpbmNvcnBvcmF0aW9uPC9zdHJvbmc+IG9yIG90aGVyIGRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgc3RvY2sgcXVhbGlmaWVzIGFzIFNlY3Rpb24gMTI0NCBzdG9jay48L2xpPlxyXG4gICAgICAgIDxsaT5BIDxzdHJvbmc+ZGV0YWlsZWQgc3RhdGVtZW50PC9zdHJvbmc+IG9mIHRoZSBpbnZlc3RtZW50LCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgYW5kIGRhdGUgb2YgdGhlIG9yaWdpbmFsIGludmVzdG1lbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OdW1iZXIgb2Ygc2hhcmVzIHB1cmNoYXNlZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIGJlaW5nIGFuIG9yaWdpbmFsIGhvbGRlci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiB0aGUgc2FsZTwvc3Ryb25nPiwgc3BlY2lmeWluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2Ygc2FsZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk51bWJlciBvZiBzaGFyZXMgc29sZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlNhbGUgcHJpY2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgYXNzb2NpYXRlZCBleHBlbnNlcyB3aXRoIHRoZSBzYWxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb3NzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBhIGJlbmVmaWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQsIHBvdGVudGlhbGx5IG1pbmltaXppbmcgeW91ciB0YXhhYmxlIGluY29tZS4gUGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgZmlsaW5nLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZWxhdGVkIFBhcnR5IFRyYW5zYWN0aW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHJlY2VpdmVkIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdlcmUgdHJhbnNhY3Rpb25zIHdpdGggcmVsYXRlZCBwYXJ0aWVzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZXNlIHRyYW5zYWN0aW9ucyBhbmQgaW5jb3Jwb3JhdGUgdGhlbSBpbnRvIHlvdXIgdGF4IGZpbGluZ3MsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbnM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UeXBlIG9mIHRyYW5zYWN0aW9ucyAoZS5nLiwgc2FsZSwgdHJhZGUsIHRyYW5zZmVyIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzKS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUocykgb2YgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgaXRlbXMgb3IgcHJvcGVydGllcyB0cmFuc2ZlcnJlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGFydGllcyBJbnZvbHZlZDo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk5hbWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIHlvdSAoZS5nLiwgZmFtaWx5IG1lbWJlciwgZnJpZW5kLCBvciBidXNpbmVzcyBlbnRpdHkpLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SWYgYSBidXNpbmVzcyBlbnRpdHkgaXMgaW52b2x2ZWQsIHlvdXIgYW5kIHlvdXIgZmFtaWx5J3Mgb3duZXJzaGlwIHBlcmNlbnRhZ2UgaW4gdGhlIGJ1c2luZXNzLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GaW5hbmNpYWwgRGV0YWlscyBvZiB0aGUgVHJhbnNhY3Rpb25zOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+TWFya2V0IHZhbHVlIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzIGF0IHRoZSB0aW1lIG9mIHRyYW5zYWN0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IHJlY2VpdmVkIG9yIHBhaWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZXhjaGFuZ2Ugb2YgZ29vZHMsIHNlcnZpY2VzLCBvciBvdGhlciBhc3NldHMsIGluY2x1ZGluZyB0aGVpciBmYWlyIG1hcmtldCB2YWx1ZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvcGllcyBvZiBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIG9yIHByb29mIG9mIHBheW1lbnQvZXhjaGFuZ2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BcHByYWlzYWxzIG9yIHZhbHVhdGlvbnMgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyByZWdhcmRpbmcgcmVsYXRlZCBwYXJ0eSB0cmFuc2FjdGlvbnMgYW5kIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gVGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTIxIEhvbWUgU2FsZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UgaGF2ZSBzb2xkIHlvdXIgbWFpbiBob21lIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSBleGNsdXNpb24gb2YgZ2FpbiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHNwZWNpZmljIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLiBCZWxvdyBpcyBhIGRldGFpbGVkIGxpc3Qgb2Ygd2hhdCB3ZSBuZWVkIGZyb20geW91OjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgU2FsZTo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBzYWxlPC9saT5cclxuICAgICAgICAgIDxsaT5TZWxsaW5nIHByaWNlPC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgc2VsbGluZyBleHBlbnNlcyAoZS5nLiwgcmVhbCBlc3RhdGUgY29tbWlzc2lvbnMsIGxlZ2FsIGZlZXMsIGV0Yy4pPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db3N0IEJhc2lzIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5EYXRlIG9mIHB1cmNoYXNlPC9saT5cclxuICAgICAgICAgIDxsaT5PcmlnaW5hbCBwdXJjaGFzZSBwcmljZTwvbGk+XHJcbiAgICAgICAgICA8bGk+UmVjb3JkcyBvZiBpbXByb3ZlbWVudHMgbWFkZSAod2l0aCBkYXRlcyBhbmQgY29zdHMpPC9saT5cclxuICAgICAgICAgIDxsaT5BbnkgY2FzdWFsdHkgbG9zc2VzIGNsYWltZWQgYW5kIGluc3VyYW5jZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB3aGlsZSBvd25pbmcgdGhlIHByb3BlcnR5PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3kgYW5kIFVzZSBEYXRhOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5Ub3RhbCB5ZWFycyBvZiBvd25lcnNoaXA8L2xpPlxyXG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBhcyB5b3VyIG1haW4gaG9tZTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHBlcmlvZHMgdGhlIHByb3BlcnR5IHdhcyByZW50ZWQgb3V0IG9yIHVzZWQgZm9yIGJ1c2luZXNzPC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgc3BlY2lhbCBjaXJjdW1zdGFuY2VzIHRoYXQgbWF5IHF1YWxpZnkgZm9yIGFuIGV4Y2VwdGlvbiB0byB0aGUgcGh5c2ljYWwgcHJlc2VuY2UgcmVxdWlyZW1lbnQgKGUuZy4sIGhlYWx0aCBpc3N1ZXMsIGVtcGxveW1lbnQgY2hhbmdlcyk8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIEdhaW4gRXhjbHVzaW9uczo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+SGF2ZSB5b3Ugc29sZCBhbm90aGVyIG1haW4gaG9tZSB3aXRoaW4gdGhlIGxhc3QgdHdvIHllYXJzIGFuZCBjbGFpbWVkIGV4Y2x1c2lvbj88L2xpPlxyXG4gICAgICAgICAgPGxpPklmIHllcywgZGV0YWlscyBvZiB0aGUgcHJpb3Igc2FsZSBpbmNsdWRpbmcgZGF0ZSBhbmQgYW1vdW50IG9mIGdhaW4gZXhjbHVkZWQ8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGZpbGluZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMDMxIEV4Y2hhbmdlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEwMzEgRXhjaGFuZ2VcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBJbiByZXZpZXdpbmcgeW91ciByZWNvcmRzLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IG1heSBoYXZlIGVuZ2FnZWQgaW4gYSBTZWN0aW9uIDEwMzEgZXhjaGFuZ2UuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHJlbGV2YW50IElSUyBndWlkZWxpbmVzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSBhbmQgdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5LiBQbGVhc2UgaW5jbHVkZSBsb2NhdGlvbiwgdHlwZSBvZiBwcm9wZXJ0eSAoZS5nLiwgY29tbWVyY2lhbCwgcmVzaWRlbnRpYWwpLCBhbmQgYW55IGlkZW50aWZ5aW5nIG51bWJlcnMgKGUuZy4sIHBhcmNlbCBudW1iZXIpLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlRyYW5zYWN0aW9uIERhdGVzOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5IHdhcyB0cmFuc2ZlcnJlZCwgYW5kIHRoZSBkYXRlIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eSB3YXMgcmVjZWl2ZWQuIFRoZXNlIGRhdGVzIGFyZSBjcnVjaWFsIHRvIGRldGVybWluZSBjb21wbGlhbmNlIHdpdGggdGhlIDQ1LWRheSBpZGVudGlmaWNhdGlvbiBhbmQgMTgwLWRheSBleGNoYW5nZSBjb21wbGV0aW9uIHJlcXVpcmVtZW50cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBWYWx1ZXM6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBib3RoIHRoZSByZWxpbnF1aXNoZWQgYW5kIHJlcGxhY2VtZW50IHByb3BlcnRpZXMgYXQgdGhlIHRpbWUgb2YgdGhlIGV4Y2hhbmdlLCBhbG9uZyB3aXRoIGFueSBmaW5hbmNpYWwgYWRqdXN0bWVudHMgb3IgYWRkaXRpb25hbCBjYXNoIHJlY2VpdmVkLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBnYWluIG9yIGxvc3MuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+SW50ZXJtZWRpYXJ5IERldGFpbHM6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IGFueSBxdWFsaWZpZWQgaW50ZXJtZWRpYXJ5IHVzZWQgZHVyaW5nIHRoZSBleGNoYW5nZSwgaW5jbHVkaW5nIHRoZWlyIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBkZXRhaWxzIG9mIHRoZWlyIGludm9sdmVtZW50LiBJZiBubyBpbnRlcm1lZGlhcnkgd2FzIHVzZWQsIHBsZWFzZSBleHBsYWluIGhvdyB0aGUgZXhjaGFuZ2Ugd2FzIGZhY2lsaXRhdGVkLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk9yaWdpbmFsIFB1cmNoYXNlIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgb3JpZ2luYWwgcHVyY2hhc2UgcHJpY2UgYW5kIGRhdGUgb2YgYWNxdWlzaXRpb24gZm9yIHRoZSByZWxpbnF1aXNoZWQgcHJvcGVydHkuIFRoaXMgaW5mb3JtYXRpb24gYXNzaXN0cyBpbiBkZXRlcm1pbmluZyB0aGUgYmFzaXMgb2YgdGhlIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBvciBFeHBlbnNlczo8L3N0cm9uZz4gRGV0YWlscyBvZiBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5IHdpdGhpbiB0aGUgZXhjaGFuZ2UgcGVyaW9kIG9yIGFueSBhZGRpdGlvbmFsIGV4cGVuc2VzIGluY3VycmVkIHRoYXQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBwcm9wZXJ0eSdzIGJhc2lzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBldmFsdWF0aW5nIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgU2VjdGlvbiAxMDMxIGV4Y2hhbmdlIGFuZCBlbnN1cmluZyB0aGF0IGFsbCBJUlMgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIEl0IGFsc28gaGVscHMgdXMgdG8gYWR2aXNlIHlvdSBhY2N1cmF0ZWx5IG9uIGFueSBwb3RlbnRpYWwgZGVmZXJyZWQgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhjaGFuZ2UuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLiBXZSBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgbWF5IGhhdmUgdW5kZXJnb25lIGEgU2VjdGlvbiAxMDMzIGV4Y2hhbmdlIChpbnZvbHVudGFyeSBjb252ZXJzaW9uKSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIG1heGltdW0gY29tcGxpYW5jZSBhbmQgYmVuZWZpdCBmb3IgeW91LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIGV2ZW50LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TmF0dXJlIG9mIHRoZSBQcm9wZXJ0eTo8L3N0cm9uZz4gRGVzY3JpYmUgdGhlIHR5cGUgb2YgcHJvcGVydHkgaW52b2x2ZWQgKGUuZy4sIHJlYWwgZXN0YXRlLCBwZXJzb25hbCBwcm9wZXJ0eSwgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBJbnZvbHVudGFyeSBDb252ZXJzaW9uOjwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBjaXJjdW1zdGFuY2VzIHRoYXQgbGVkIHRvIHRoZSBpbnZvbHVudGFyeSBjb252ZXJzaW9uIChlLmcuLCBuYXR1cmFsIGRpc2FzdGVyLCB0aGVmdCwgY29uZGVtbmF0aW9uKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluc3VyYW5jZSBQcm9jZWVkcyBSZWNlaXZlZDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGFtb3VudCBvZiBhbnkgaW5zdXJhbmNlIHByb2NlZWRzIHJlY2VpdmVkIGFzIGNvbXBlbnNhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWludmVzdG1lbnQgb2YgUHJvY2VlZHM6PC9zdHJvbmc+IERldGFpbCBhbnkgcmVpbnZlc3RtZW50IG9mIHRoZSBwcm9jZWVkcyBpbnRvIHNpbWlsYXIgcHJvcGVydHksIGluY2x1ZGluZyB0eXBlcyBvZiBwcm9wZXJ0aWVzIGFjcXVpcmVkLCBkYXRlcyBvZiBhY3F1aXNpdGlvbiwgYW5kIGFtb3VudHMgcmVpbnZlc3RlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRpbWVsaW5lIG9mIEV2ZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhIHRpbWVsaW5lIG9mIHRoZSBrZXkgZXZlbnRzLCBmcm9tIHRoZSBkYXRlIG9mIHRoZSBpbnZvbHVudGFyeSBjb252ZXJzaW9uIHRvIHRoZSByZWludmVzdG1lbnQgb2YgcHJvY2VlZHMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBpbnN1cmFuY2Ugc2V0dGxlbWVudCBzdGF0ZW1lbnRzLCBwdXJjaGFzZSBjb250cmFjdHMgZm9yIHJlcGxhY2VtZW50IHByb3BlcnR5LCBvciBvZmZpY2lhbCBub3RpY2VzIG9mIGNvbmRlbW5hdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSB0byBmYWNpbGl0YXRlIGFuIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gV2UncmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtaWdodCBoYXZlIHJlZ2FyZGluZyB0aGlzIHJlcXVlc3QuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+SSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheGVzLCB3ZSBub3RpY2VkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgcmVudGFsIGluY29tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGV4cGxvcmUgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgbmVlZCBzb21lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgcmVudGFsIGluY29tZS48L3A+XHJcbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbjxvbD5cclxuICA8bGk+VGhlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IGdlbmVyYXRpbmcgdGhlIHJlbnRhbCBpbmNvbWUuPC9saT5cclxuICA8bGk+VG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgPGxpPk1vbnRocyB0aGUgcHJvcGVydHkgd2FzIHJlbnRlZCBvdXQuPC9saT5cclxuICA8bGk+QW55IHBlcmlvZHMgb2YgcGVyc29uYWwgdXNlIG9mIHRoZSByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICA8bGk+QSBzdW1tYXJ5IG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBwcm9wZXJ0eSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogcHJvcGVydHkgbWFuYWdlbWVudCBmZWVzLCBtYWludGVuYW5jZSBhbmQgcmVwYWlycywgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgYW5kIG1vcnRnYWdlIGludGVyZXN0IChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gIDxsaT5EZXRhaWxzIG9mIGFueSBtYWpvciBpbXByb3ZlbWVudHMgb3IgcmVub3ZhdGlvbnMgZG9uZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIHBhaW50IGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB5b3VyIHJlbnRhbCBpbmNvbWUsIGFsbG93aW5nIHVzIHRvIGVuc3VyZSB3ZSB0YWtlIGFkdmFudGFnZSBvZiBhbnkgYXBwbGljYWJsZSBkZWR1Y3Rpb25zIGFuZCBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcnVjaWFsIGZvciB0aGUgdGltZWx5IGFuZCBlZmZlY3RpdmUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRzLjwvcD5cclxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgaWYgdGhlcmUncyBhbnkgb3RoZXIgd2F5IEkgY2FuIGFzc2lzdCwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGdldCBpbiB0b3VjaC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWR2YW5jZWQgUmVudFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWR2YW5jZWQgUmVudFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCByZWNlaXZpbmcgYWR2YW5jZWQgcmVudCBwYXltZW50cyB0aGlzIHllYXIgZm9yIHlvdXIgcmVudGFsIHByb3BlcnR5LiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIGFkdmFuY2VkIHJlbnQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSBzdW0gdG90YWwgb2YgYWxsIHJlbnQgcGF5bWVudHMgcmVjZWl2ZWQgaW4gYWR2YW5jZSAoY292ZXJpbmcgZnV0dXJlIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IG1vbnRoKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUocykgb2YgcmVjZWlwdDo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZXNlIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgcGVyaW9kIGNvdmVyZWQ6PC9zdHJvbmc+IFRoZSByYW5nZSBvZiBkYXRlcyAoc3RhcnQgYW5kIGVuZCkgdGhhdCBlYWNoIGFkdmFuY2VkIHJlbnQgcGF5bWVudCBjb3ZlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBhZGRyZXNzOjwvc3Ryb25nPiBUaGUgYWRkcmVzcyBvZiB0aGUgcmVudGFsIHByb3BlcnR5IGZvciB3aGljaCB0aGUgYWR2YW5jZWQgcmVudCB3YXMgcGFpZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxlYXNlIGFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBsZWFzZSBhZ3JlZW1lbnQocykgd2l0aCB0aGUgdGVuYW50KHMpIHRoYXQgc3BlY2lmaWVzIHRoZSB0ZXJtcyBvZiB0aGUgYWR2YW5jZWQgcmVudCBwYXltZW50KHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IHBhcnRpYWwgcmVmdW5kcyBpc3N1ZWQ6PC9zdHJvbmc+IElmIGFueSByZWZ1bmRzIHdlcmUgaXNzdWVkIGFnYWluc3QgdGhlIGFkdmFuY2VkIHJlbnRzIHJlY2VpdmVkLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxzIGFuZCByZXNwZWN0aXZlIGFtb3VudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHBpdm90YWwgaW4gZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGlhbnQgd2l0aCByZWxldmFudCB0YXggbGF3cy4gUGxlYXNlIGVuc3VyZSB0aGUgZGV0YWlscyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMZWFzZSBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCBpbiB5b3VyIHByZWxpbWluYXJ5IHRheCBpbmZvcm1hdGlvbiB0aGF0IHlvdSByZWNlaXZlZCBwYXltZW50IGZyb20gYSB0ZW5hbnQgZm9yIGVhcmx5IGxlYXNlIGNhbmNlbGxhdGlvbi4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBhbmQgYXNzZXNzIGFueSB0YXggaW1wbGljYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkxlYXNlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBsZWFzZSBhZ3JlZW1lbnQgd2l0aCB0aGUgdGVuYW50IHdobyBwYWlkIHRvIHRlcm1pbmF0ZSB0aGVpciBsZWFzZSBlYXJseS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5BbWVuZG1lbnQgb3IgVGVybWluYXRpb24gQWdyZWVtZW50Ojwvc3Ryb25nPiBBbnkgZG9jdW1lbnRzIHRoYXQgZm9ybWFsbHkgYWNrbm93bGVkZ2UgdGhlIGVhcmx5IHRlcm1pbmF0aW9uIG9mIHRoZSBsZWFzZSwgaW5jbHVkaW5nIGFueSBwZW5hbHRpZXMsIHRoZSB0ZXJtaW5hdGlvbiBkYXRlLCBhbmQgb3RoZXIgcmVsZXZhbnQgdGVybXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIHRoZSBwYXltZW50IHJlY2VpdmVkIGZvciBsZWFzZSB0ZXJtaW5hdGlvbi4gVGhpcyBjb3VsZCBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSB0cmFuc2FjdGlvbiwgYSByZWNlaXB0IHByb3ZpZGVkIHRvIHRoZSB0ZW5hbnQsIG9yIGFueSB3cml0dGVuIGFncmVlbWVudCBzcGVjaWZ5aW5nIHRoZSBhbW91bnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tbXVuaWNhdGlvbiBFdmlkZW5jZTo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGNvbW11bmljYXRpb24gYmV0d2VlbiB5b3UgYW5kIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gYW5kIHRoZSBhZ3JlZW1lbnQgdG8gdGVybWluYXRlIGVhcmx5LCBpbmNsdWRpbmcgZW1haWxzIG9yIGxldHRlcnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGVzZSBkb2N1bWVudHMgYXJlIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHRheCB0cmVhdG1lbnQgb2YgdGhlIGxlYXNlIGNhbmNlbGxhdGlvbiBwYXltZW50IHlvdSByZWNlaXZlZC4gVGhleSB3aWxsIGhlbHAgdG8gZW5zdXJlIHRoYXQgd2UgcmVwb3J0IHlvdXIgaW5jb21lIGFjY3VyYXRlbHkgYW5kIHRha2UgYWR2YW50YWdlIG9mIGFueSBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cy48L3A+XHJcbiAgICA8cD48c3Ryb25nPkFjdGlvbiBSZXF1aXJlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tLCBvciB1cGxvYWQgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhaWQgQWR2YW5jZSBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcywgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBwYXltZW50cyBmb3IgaW5zdXJhbmNlIHByZW1pdW1zIG9yIHNpbWlsYXIgY29zdHMgcmVsYXRlZCB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSwgd2hpY2ggY292ZXIgcGVyaW9kcyBiZXlvbmQgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcHJlcGFpZCBleHBlbnNlcyBpbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBQYWlkIEV4cGVuc2VzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMgc2hvd2luZyB0aGUgcGF5bWVudCBvZiBpbnN1cmFuY2UgcHJlbWl1bXMgb3Igc2ltaWxhciBleHBlbnNlcy4gVGhpcyBzaG91bGQgY2xlYXJseSBpbmRpY2F0ZSB0aGUgYW1vdW50IHBhaWQsIHRoZSBkYXRlIG9mIHBheW1lbnQsIGFuZCB0aGUgY292ZXJhZ2UgcGVyaW9kLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+Q292ZXJhZ2UgUGVyaW9kIERldGFpbHM6PC9zdHJvbmc+IFdlIG5lZWQgc3BlY2lmaWMgZGV0YWlscyByZWdhcmRpbmcgdGhlIGNvdmVyYWdlIHBlcmlvZCBmb3IgZWFjaCBleHBlbnNlLiBQbGVhc2UgaW5jbHVkZSBkb2N1bWVudGF0aW9uIG9yIGEgd3JpdHRlbiBzdW1tYXJ5IHRoYXQgc3BlY2lmaWVzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSBjb3ZlcmFnZSBwZXJpb2RzIHRoYXQgZXh0ZW5kIGJleW9uZCB0aGUgY3VycmVudCB5ZWFyLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+UHJvcGVydHkgSW5mb3JtYXRpb246PC9zdHJvbmc+IENvbmZpcm0gdGhlIGFkZHJlc3Mgb3IgaWRlbnRpZmljYXRpb24gb2YgdGhlIHJlbnRhbCBwcm9wZXJ0eShpZXMpIHRvIHdoaWNoIHRoZXNlIGV4cGVuc2VzIGFwcGx5LjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+UHVycG9zZSBvZiB0aGUgRXhwZW5zZTo8L3N0cm9uZz4gRm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIHByb3ZpZGUgYSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgbmF0dXJlIG9mIGVhY2ggZXhwZW5zZSAoZS5nLiwgcHJvcGVydHkgaW5zdXJhbmNlLCBsaWFiaWxpdHkgaW5zdXJhbmNlKS48L2xpPlxyXG48L29sPlxyXG48cD5QbGVhc2UgcmVtZW1iZXIgdGhhdCBoYXZpbmcgYWNjdXJhdGUgYW5kIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiB3aWxsIGFpZCBpbiBlbnN1cmluZyB0aGF0IHlvdXIgdGF4IHJldHVybnMgYXJlIHByZXBhcmVkIGNvcnJlY3RseSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0YXggYmVuZWZpdHMgcmVsYXRlZCB0byB0aGVzZSBwcmVwYWlkIGV4cGVuc2VzLjwvcD5cclxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgbmVjZXNzYXJ5IGRvY3VtZW50cyBmb3IgdGF4IHByZXBhcmF0aW9uLiBcclxuICAgIEFzIHBlciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgcGF5bWVudCBmb3IgbG9jYWwgaW1wcm92ZW1lbnRzIFxyXG4gICAgb3Igc2VydmljZXMgdGhhdCBkaXJlY3RseSBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgeW91ciByZW50YWwgcHJvcGVydHksIFxyXG4gICAgd2UgbmVlZCBmdXJ0aGVyIGRldGFpbHMgdG8gZW5zdXJlIHRoZSBhY2N1cmF0ZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50YXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2UgcHJvdmlkZWQgKGUuZy4sIHN0cmVldCByZXBhaXJzLCBuZXcgc2lkZXdhbGtzKS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlLjwvbGk+XHJcbiAgICAgICAgPGxpPlRvdGFsIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGVhY2ggaW1wcm92ZW1lbnQgb3Igc2VydmljZS48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBwYXltZW50IGZvciB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSAocmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+QW55IG9mZmljaWFsIG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBsb2NhbCBtdW5pY2lwYWxpdHkgcmVnYXJkaW5nIHRoZSBpbXByb3ZlbWVudHMgb3IgY2hhcmdlcy48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIGhvdyB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSBzcGVjaWZpY2FsbHkgYmVuZWZpdGVkIHlvdXIgcmVudGFsIHByb3BlcnR5LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0eSB2YWx1ZSBpbmNyZWFzZXMgZHVlIHRvIGxvY2FsIGltcHJvdmVtZW50cyBvciBzZXJ2aWNlcy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBmYWNpbGl0YXRlIHRoZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudGF0aW9uLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmZlaXRlZCBTZWN1cml0eSBEZXBvc2l0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxpYW50LCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBoYXZpbmcgb25lIG9yIG1vcmUgdGVuYW50cyB3aG8gZGlkIG5vdCBnZXQgdGhlaXIgc2VjdXJpdHkgZGVwb3NpdCBiYWNrIHRoaXMgeWVhciBkdWUgdG8gZWl0aGVyIGJyZWFraW5nIHRoZSBsZWFzZSB0ZXJtcyBvciBsZWF2aW5nIGRhbWFnZSByZXF1aXJpbmcgcmVwYWlyLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BIGxpc3Qgb2YgZWFjaCB0ZW5hbnQgd2hvc2Ugc2VjdXJpdHkgZGVwb3NpdCB3YXMgZm9yZmVpdGVkLCBpbmNsdWRpbmc6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VGVuYW50J3MgbmFtZTwvbGk+XHJcbiAgICAgICAgICA8bGk+UmVudGFsIGFkZHJlc3M8L2xpPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2YgbGVhc2UgdGVybWluYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIGNvbW11bmljYXRpb24gZXZpZGVuY2luZyB0aGUgZm9yZmVpdHVyZSByZWFzb24sIHN1Y2ggYXM6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50IHNob3dpbmcgdGhlIGJyZWFjaGVkIHRlcm1zPC9saT5cclxuICAgICAgICAgIDxsaT5QaG90b3Mgb3IgcmVwYWlyIGludm9pY2VzIGZvciBkYW1hZ2VzIGNhdXNlZCBieSB0aGUgdGVuYW50PC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgd3JpdHRlbiBub3RpY2VzIHByb3ZpZGVkIHRvIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBmb3JmZWl0dXJlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBlYWNoIGZvcmZlaXRlZCBzZWN1cml0eSBkZXBvc2l0LjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHJlYXNvbnMgZm9yIHNlY3VyaXR5IGRlcG9zaXQgZm9yZmVpdHVyZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhpcyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBpbiBhIGNsZWFyIGFuZCBvcmdhbml6ZWQgbWFubmVyIHRvIGZhY2lsaXRhdGUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uLUNhc2ggUmVudFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uLUNhc2ggUmVudFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2Ugbm90ZSBmcm9tIHlvdXIgZWFybGllciByZXNwb25zZXMgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBub24tY2FzaCBmb3JtcyBvZiBwYXltZW50IGluIGxpZXUgb2YgcmVudCB0aGlzIHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZXNlIHRyYW5zYWN0aW9ucy4gS2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBTZXJ2aWNlIG9yIEdvb2RzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgeW91IHJlY2VpdmVkIGFzIHJlbnQgcGF5bWVudC4gRm9yIGluc3RhbmNlLCBcIlJlcGFpciBzZXJ2aWNlcyBmb3IgdGhlIGtpdGNoZW4gcGx1bWJpbmdcIiBvciBcImEgbGFwdG9wIGNvbXB1dGVyXCIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlZhbHVlIEVzdGltYXRpb246PC9zdHJvbmc+IEFuIGVzdGltYXRlZCB2YWx1ZSBvZiB0aGUgc2VydmljZSwgZ29vZHMsIG9yIHByb3BlcnR5IHJlY2VpdmVkIGF0IHRoZSB0aW1lIG9mIHRoZSB0cmFuc2FjdGlvbi4gSWYgcG9zc2libGUsIGluY2x1ZGUgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGlzIHZhbHVhdGlvbiwgc3VjaCBhcyByZWNlaXB0cywgaW52b2ljZXMsIG9yIHdyaXR0ZW4gYWdyZWVtZW50cy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGF0ZShzKSBvZiBUcmFuc2FjdGlvbjo8L3N0cm9uZz4gU3BlY2lmaWMgZGF0ZShzKSB3aGVuIHlvdSByZWNlaXZlZCB0aGVzZSBnb29kcyBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW5mb3JtYXRpb24gYWJvdXQgdGhlIFRlbmFudCBvciBQcm92aWRlcjo8L3N0cm9uZz4gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGFncmVlbWVudHMgb3IgY29udHJhY3RzIHRoYXQgb3V0bGluZSB0aGlzIGFycmFuZ2VtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWNlaXB0cyBvciBEb2N1bWVudGF0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbjo8L3N0cm9uZz4gQW55IHJlY2VpcHRzLCBpbnZvaWNlcywgb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB0aGUgZXhjaGFuZ2UuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgYWNjdXJhdGVseSByZWZsZWN0aW5nIHlvdXIgaW5jb21lLiBZb3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBncmVhdGx5IGFzc2lzdCBpbiBjb21wbGV0aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBhY2NvdW50cywgd2UndmUgbm90ZWQgdGhhdCBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkIGFzIHBhcnQgb2YgdGhlaXIgdGF4IHRyZWF0bWVudCBpbiBvdXIgZmluYW5jaWFsIHJlY29yZHMuIFRoaXMgbWV0aG9kIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlIGZpbmFuY2lhbCByZXBvcnRpbmcgYW5kIHRheCBlZmZpY2llbmN5LiBIb3dldmVyLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgdGhlcmUgbWF5IGJlIGRpc2NyZXBhbmNpZXMgb3IgdXBkYXRlcyByZXF1aXJlZCBpbiBvdXIgcmVjb3JkcyByZWdhcmRpbmcgdGhlIGRlcHJlY2lhdGlvbiBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzLjwvcD5cclxuICAgIDxwPlRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIGZpbmFuY2lhbCBhbmQgdGF4IHJlcG9ydGluZywgd2Uga2luZGx5IHJlcXVlc3QgeW91ciBhc3Npc3RhbmNlIGluIHZlcmlmeWluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgeW91ciByZW50YWwgcHJvcGVydGllcyB3aXRoIHJlZ2FyZHMgdG8gZGVwcmVjaWF0aW9uLjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT5Db25maXJtIHdoZXRoZXIgYWxsIHlvdXIgcmVudGFsIHByb3BlcnRpZXMgYXJlIGJlaW5nIGRlcHJlY2lhdGVkIGluIG91ciBib29rcy4gSWYgdGhpcyBpcyBhY2N1cmF0ZSwgbm8gYWN0aW9uIGlzIHJlcXVpcmVkIG9uIHlvdXIgcGFydC48L2xpPlxyXG4gICAgPGxpPklmIHRoZXJlIGFyZSBhbnkgcmVudGFsIHByb3BlcnRpZXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggcHJvcGVydHk6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaT5Qcm9wZXJ0eSBBZGRyZXNzPC9saT5cclxuICAgICAgICAgICAgPGxpPkRhdGUgb2YgUHVyY2hhc2U8L2xpPlxyXG4gICAgICAgICAgICA8bGk+UHVyY2hhc2UgUHJpY2U8L2xpPlxyXG4gICAgICAgICAgICA8bGk+UmVhc29uIGZvciBOb24tRGVwcmVjaWF0aW9uPC9saT5cclxuICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYW5kIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3VyIGZpbmFuY2lhbCByZWNvcmRzIGFjY3VyYXRlbHkgcmVmbGVjdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhbmQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgZm9yIHJldmlzaW9ucyBhbmQgdXBkYXRlcyBhcyBuZWNlc3NhcnkuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBXZSBhcmUgaGVyZSB0byBzdXBwb3J0IHlvdSBpbiBtYWludGFpbmluZyBwcmVjaXNlIGFuZCBjb21wbGlhbnQgZmluYW5jaWFsIHJlY29yZHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBjb250aW51ZWQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUmVwYWlyc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFJlcGFpcnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgbWFraW5nIG5lY2Vzc2FyeSByZXBhaXJzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRvIGtlZXAgaXQgaW4gZ29vZCB3b3JraW5nIGNvbmRpdGlvbi4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgZXhwZW5zZXMgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFsbCByZXBhaXJzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhci4gUGxlYXNlIGluY2x1ZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgbmF0dXJlIG9mIGVhY2ggcmVwYWlyIChlLmcuLCBmaXhpbmcgbGVha3MsIHBhaW50aW5nLCByZXBhaXJpbmcgYXBwbGlhbmNlcykuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBlYWNoIHJlcGFpciB3YXMgY29tcGxldGVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGxvY2F0aW9uL2FkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IHdoZXJlIHJlcGFpcnMgd2VyZSBtYWRlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIGVhY2ggcmVwYWlyIG1hZGUuIFRoaXMgc2hvdWxkIGluY2x1ZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgc2VydmljZSBwcm92aWRlcuKAmXMgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgcGFpZCBmb3IgZWFjaCByZXBhaXIuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3JrIHBlcmZvcm1lZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBtZXRob2Qgb2YgcGF5bWVudCB1c2VkLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+SWYgYW55IHJlcGFpcnMgd2VyZSBtYWRlIGJ5IHlvdXJzZWxmIG9yIGFuIHVubGljZW5zZWQgY29udHJhY3RvciwgcGxlYXNlIHByb3ZpZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3JrIHBlcmZvcm1lZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBjb3N0IG9mIG1hdGVyaWFscyBwdXJjaGFzZWQsIHN1cHBvcnRlZCBieSByZWNlaXB0cy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIGhvdXJzIHNwZW50IG9uIGVhY2ggcmVwYWlyLCBhbG9uZyB3aXRoIGEgcmVhc29uYWJsZSBob3VybHkgcmF0ZSBmb3IgbGFib3IuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgYWNjdXJhdGUgYW5kIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBvcHRpbWl6ZSB5b3VyIHRheCBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gcHJvcGVydHkgcmVwYWlyIGV4cGVuc2VzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIG5lZWRlZCwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSd2ZSBtYWRlIHVwZ3JhZGVzIG9yIGVuaGFuY2VtZW50cyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGluY29ycG9yYXRlIHRoZXNlIGltcHJvdmVtZW50cyBpbnRvIHlvdXIgdGF4IGRvY3VtZW50YXRpb24sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBJbXByb3ZlbWVudDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHVwZ3JhZGUgb3IgZW5oYW5jZW1lbnQgbWFkZSB0byB0aGUgcHJvcGVydHkuIFRoaXMgY291bGQgaW5jbHVkZSByZW5vdmF0aW9ucywgYWRkaXRpb25zLCBvciBhbnkgdXBncmFkZXMgdGhhdCBoYXZlIGluY3JlYXNlZCBpdHMgdmFsdWUsIGV4dGVuZGVkIGl0cyBsaWZlc3Bhbiwgb3IgYWRhcHRlZCBpdCB0byBuZXcgdXNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIEltcHJvdmVtZW50czo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgd2hlbiB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgc3RhcnRlZCBhbmQgY29tcGxldGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHMgSW52b2x2ZWQ6PC9zdHJvbmc+IERldGFpbGVkIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBpbXByb3ZlbWVudCBwcm9qZWN0LiBUaGlzIGluY2x1ZGVzIG1hdGVyaWFscywgbGFib3IsIHBlcm1pdHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29zdHMuIFBsZWFzZSBwcm92aWRlIGl0ZW1pemVkIHJlY2VpcHRzIG9yIGludm9pY2VzIGlmIGF2YWlsYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFBheW1lbnQ6PC9zdHJvbmc+IENvcGllcyBvZiBjYW5jZWxsZWQgY2hlY2tzLCBiYW5rIHN0YXRlbWVudHMsIG9yIGVsZWN0cm9uaWMgcGF5bWVudCBjb25maXJtYXRpb25zIHRoYXQgcHJvdmUgcGF5bWVudCBmb3IgdGhlIGltcHJvdmVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJlZm9yZSBhbmQgQWZ0ZXIgUGljdHVyZXM6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgcGhvdG9ncmFwaHMgb2YgdGhlIHByb3BlcnR5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGltcHJvdmVtZW50cyB3ZXJlIG1hZGUuIFRoaXMgaGVscHMgaW4gc3Vic3RhbnRpYXRpbmcgdGhlIGVuaGFuY2VtZW50IHRvIHlvdXIgcHJvcGVydHkncyB2YWx1ZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyYWN0b3IgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGNvbnRyYWN0b3JzIHdlcmUgdXNlZCwgcGxlYXNlIHByb3ZpZGUgdGhlaXIgYnVzaW5lc3MgbmFtZXMsIGFkZHJlc3NlcywgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgY29tcHV0aW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBiZW5lZml0cyB0aGF0IG1heSBiZSBhcHBsaWNhYmxlIHRvIHlvdSBhcyBhIHJlc3VsdCBvZiB0aGVzZSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMuIFBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgZ2F0aGVyZWQgYW5kIHN1Ym1pdHRlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJucy48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEFjdGl2aXR5IFBhcnRpY2lwYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBBY3Rpdml0eSBQYXJ0aWNpcGF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSBtb3ZlIGZvcndhcmQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiwgaXQgaGFzIGJlY29tZSBuZWNlc3NhcnkgdG8gY29sbGVjdCBhIGJpdCBtb3JlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGFjdGl2ZSBwYXJ0aWNpcGF0aW9uIGluIHJlbnRhbCBwcm9wZXJ0eSBhY3Rpdml0aWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHBhc3Npbmcgc3BlY2lmaWMgdGF4IHRlc3RzIHRoYXQgYXBwbHkgdG8gaW5kaXZpZHVhbHMgYWN0aXZlbHkgaW52b2x2ZWQgaW4gdGhlaXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGRldGFpbHMgdG8gZW5zdXJlIHdlIG1lZXQgYWxsIHJlcXVpcmVtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHlvdXIgYWN0aXZlIHJvbGVzIHRoaXMgdGF4IHllYXIuIFRoaXMgaW5jbHVkZXMgbWFraW5nIGRlY2lzaW9ucyBzdWNoIGFzIGFwcHJvdmluZyBuZXcgdGVuYW50cywgc2V0dGluZyByZW50YWwgdGVybXMsIG9yIGF1dGhvcml6aW5nIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZSBTcGVudDo8L3N0cm9uZz4gQW4gZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyB5b3UgcGVyc29uYWxseSBzcGVudCBvbiBhY3Rpdml0aWVzIHJlbGF0ZWQgdG8gdGhlIG1hbmFnZW1lbnQgYW5kIGRlY2lzaW9uLW1ha2luZyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlY2lzaW9uIFJlY29yZHM6PC9zdHJvbmc+IEFueSBhdmFpbGFibGUgcmVjb3JkcyBvciBjb3JyZXNwb25kZW5jZSB0aGF0IHNob3djYXNlIHlvdXIgaW52b2x2ZW1lbnQgaW4ga2V5IGRlY2lzaW9ucyAoZS1tYWlscywgc2lnbmVkIGRvY3VtZW50cywgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBNYW5hZ2VtZW50IEVuZ2FnZW1lbnQ6PC9zdHJvbmc+IElmIHlvdSd2ZSBlbmdhZ2VkIHdpdGggYSBwcm9wZXJ0eSBtYW5hZ2VyLCBhIGRlc2NyaXB0aW9uIG9mIHRoZWlyIHJvbGUgdmVyc3VzIHRoZSB0YXNrcyB5b3UgcGVyc29uYWxseSBoYW5kbGUgd291bGQgYmUgaGVscGZ1bC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2Ugc3BlY2lmaWNzIHdpbGwgZ3JlYXRseSBmYWNpbGl0YXRlIHRoZSBhY2N1cmF0ZSBhbmQgYWR2YW50YWdlb3VzIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIHJlZ2FyZGluZyByZW50YWwgYWN0aXZpdGllcy4gSWYgdGhlcmUgYXJlIGFueSBhc3BlY3RzIG9mIHRoaXMgcmVxdWVzdCB0aGF0IHJlcXVpcmUgY2xhcmlmaWNhdGlvbiwgb3IgaWYgYXNzaXN0YW5jZSBpcyBuZWVkZWQsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlYWwgRXN0YXRlIFByb2Zlc3Npb25hbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB5b3UndmUgc3BlbnQgbW9yZSB0aGFuIGhhbGYgb2YgeW91ciB3b3JraW5nIHRpbWUgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcyB0aGlzIHRheCB5ZWFyLiBUbyBwcm9wZXJseSBldmFsdWF0ZSB5b3VyIGVsaWdpYmlsaXR5IGZvciB0YXggYmVuZWZpdHMgYXMgYSBSZWFsIEVzdGF0ZSBQcm9mZXNzaW9uYWwsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgQW5udWFsIFdvcmtpbmcgSG91cnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgc3VtbWFyeSBvZiB5b3VyIHRvdGFsIHdvcmtpbmcgaG91cnMgdGhpcyB5ZWFyLCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgaG91cnMgZGVkaWNhdGVkIHRvIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlYWwgRXN0YXRlIEFjdGl2aXRpZXM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gc3VjaCBhcyBjb250cmFjdHMsIGVuZ2FnZW1lbnQgbGV0dGVycywgb3IgY2xpZW50IGludm9pY2VzIHRoYXQgcHJvdmUgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgKGUuZy4sIHNhbGVzLCBsZWFzaW5nLCBtYW5hZ2VtZW50KS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+TGlzdCBvZiBQcm9wZXJ0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb2YgcHJvcGVydGllcyB5b3UgaGF2ZSBtYW5hZ2VkLCBzb2xkLCBvciBhcmUgY3VycmVudGx5IHNlbGxpbmcsIGluY2x1ZGluZyB0aGVpciBsb2NhdGlvbiBhbmQgdGhlIG5hdHVyZSBvZiB5b3VyIGludm9sdmVtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBKb2IgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgb3V0bGluZSBvZiB5b3VyIHJvbGUocykgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcywgc3BlY2lmeWluZyB3aGV0aGVyIHlvdXIgaW52b2x2ZW1lbnQgaXMgcHJpbWFyaWx5IGFzIGEgYnJva2VyLCBhZ2VudCwgcHJvcGVydHkgbWFuYWdlciwgZXRjLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBMaWNlbnNlcyBvciBDZXJ0aWZpY2F0aW9uczo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSBsaWNlbnNlcyBvciBjZXJ0aWZpY2F0aW9ucyB0aGF0IHZhbGlkYXRlIHlvdXIgcHJvZmVzc2lvbmFsIHN0YXR1cyBpbiB0aGUgcmVhbCBlc3RhdGUgc2VjdG9yLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5DYWxlbmRhciBvciBTY2hlZHVsZTo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBhIGNhbGVuZGFyIG9yIHNjaGVkdWxlIHJlZmxlY3RpbmcgeW91ciByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIHRocm91Z2hvdXQgdGhlIHllYXIgdG8gaGVscCBjb3Jyb2JvcmF0ZSB0aGUgdGltZSBzcGVudCBpbiB0aGVzZSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgc2VudCB0byB1cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGF2b2lkIGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFJlbnRhbCBQcm9wZXJ0eVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyBrbm93IHRoYXQgeW91IHJlbnRlZCBvdXQgYSBwb3J0aW9uIG9mIHlvdXIgcHJvcGVydHkgdGhpcyB0YXggeWVhciB3aGlsZSB1c2luZyB0aGUgcmVzdCBmb3IgcGVyc29uYWwgcHVycG9zZXMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGJlc3QgdGF4IGFkdmFudGFnZXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBwYXJ0aWFsIHJlbnRhbCBwcm9wZXJ0eTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvbXBsZXRlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIHJlbnRlZCBwb3J0aW9uIGFuZCB0aGUgcGVyc29uYWwgdXNlIHBvcnRpb24uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3B5IG9mIHRoZSByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+U3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgcmVudGFsIHBlcmlvZCB3aXRoaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgSW5jb21lOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgcmVudGFsIGluY29tZSByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgYWR2YW5jZSByZW50IG9yIHNlY3VyaXR5IGRlcG9zaXRzIG5vdCByZXR1cm5lZCB0byB0aGUgdGVuYW50LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBleHBlbnNlcyBmb3IgdGhlIHJlbnRhbCBwcm9wZXJ0eSwgaW5jbHVkaW5nIHJlcGFpcnMsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBhbmQgcHJvcGVydHkgdGF4ZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBleHBlbnNlcyBzaGFyZWQgYmV0d2VlbiB0aGUgcmVudGFsIGFuZCBwZXJzb25hbCB1c2UgcG9ydGlvbnMsIGFuZCBob3cgdGhleSBhcmUgZGl2aWRlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VXNlIG9mIFByb3BlcnR5Ojwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgbnVtYmVyIG9mIGRheXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Ub3RhbCBudW1iZXIgb2YgZGF5cyByZW50ZWQgYXQgZmFpciByZW50YWwgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgUmVwYWlyczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBvciByZXBhaXJzIG1hZGUgc3BlY2lmaWNhbGx5IGluIHRoZSByZW50YWwgcG9ydGlvbiBhbmQgdGhlIGNvc3QgaW52b2x2ZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoaXMgaW5mb3JtYXRpb24gYXJlIGNydWNpYWwgZm9yIGNvcnJlY3QgdGF4IGZpbGluZyBhbmQgb3B0aW1pemluZyB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zIGFuZCB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+RG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHVzaW5nIHlvdXIgcmVudGFsIHByb3BlcnR5IGZvciBwZXJzb25hbCBwdXJwb3NlcyBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRheXMgZHVyaW5nIHRoZSB0YXggeWVhciB3aGVuIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBieSB5b3UsIHlvdXIgZmFtaWx5LCBvciBmcmllbmRzIHdpdGhvdXQgY2hhcmdpbmcgcmVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGRheXMgcmVudGVkIGF0IGZhaXIgcmVudGFsIHByaWNlOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBudW1iZXIgb2YgZGF5cyB0aGUgcHJvcGVydHkgd2FzIGFjdHVhbGx5IHJlbnRlZCBvdXQgdG8gdGVuYW50cyBhdCBhIGZhaXIgcmVudGFsIHByaWNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIGluY29tZSByZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgdG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBleHBlbnNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGV4cGVuc2VzIGluY3VycmVkIGZvciB0aGUgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYWR2ZXJ0aXNpbmcsIGNsZWFuaW5nIGFuZCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIHByb3BlcnR5IHRheGVzLCBtb3J0Z2FnZSBpbnRlcmVzdCwgYW5kIGFueSByZXBhaXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIGFuZCBkYXRlczo8L3N0cm9uZz4gTGlzdCBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5IGR1cmluZyB0aGUgdGF4IHllYXIsIGFsb25nIHdpdGggdGhlIGRhdGUgb2YgaW1wcm92ZW1lbnQgYW5kIHRoZSBjb3N0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IFN0YXRlbWVudCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50Ojwvc3Ryb25nPiBBdHRhY2ggYSBjb3B5IG9mIHlvdXIgYW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnQgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudCBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgZW5hYmxlIHVzIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHBvcnRpb24gb2YgZXhwZW5zZXMgdGhhdCBjYW4gYmUgZGVkdWN0ZWQgYW5kIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvdW50cyBhcyBwZXJzb25hbCB1c2UgdmVyc3VzIHJlbnRhbCB1c2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+ICBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhcnRpYWwgUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCByZW50aW5nIG91dCBwYXJ0IG9mIHlvdXIgcHJvcGVydHkgZm9yIHByb2ZpdCwgd2hpbGUgYWxzbyB1c2luZyBpdCBpbiBhIG1hbm5lciB0aGF0IG1heSBjbGFzc2lmeSBpdCBhcyB5b3VyIHJlc2lkZW5jZS4gVG8gYWNjdXJhdGVseSBjYXB0dXJlIGFsbCBpbmZvcm1hdGlvbiBhbmQgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudC9MZWFzZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlIHRoYXQgc3BlY2lmaWVzIHRoZSB0ZXJtcywgcmVudGFsIHBlcmlvZCwgYW5kIHBheW1lbnQgZGV0YWlscy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZW50YWwgSW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IFJlY2VpcHRzIGFuZCByZWNvcmRzIG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZXBhaXJzLCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIGFuZCBwcm9wZXJ0eSBtYW5hZ2VtZW50IGZlZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgVXNlIERldGFpbHM6PC9zdHJvbmc+IEEgbG9nIG9yIGNhbGVuZGFyIGRvY3VtZW50aW5nIHRoZSBzcGVjaWZpYyBkYXlzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMgYW5kIG5vdCByZW50ZWQgb3V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IFRheCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCBzdGF0ZW1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBSZWNvcmRzIG9mIGFueSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMgb3IgZGVwcmVjaWF0aW9uIHNjaGVkdWxlcyBpZiBwcmV2aW91c2x5IGNsYWltZWQgb24geW91ciB0YXggcmV0dXJucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGRvY3VtZW50cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBvciBjb250YWN0IHVzIGRpcmVjdGx5IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3lhbHR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUm95YWx0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIGluZGljYXRlZCByZWNlaXZpbmcgcGF5bWVudHMgdGhhdCBjb3VsZCBiZSBjb25zaWRlcmVkIHJveWFsdHkgaW5jb21lIHRoaXMgcGFzdCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbGwgRm9ybXMgMTA5OS1NSVNDOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgYW55IDEwOTktTUlTQyBmb3JtcyByZWNlaXZlZCBmb3Igcm95YWx0eSBwYXltZW50cy4gSW5jbHVkZSB0aG9zZSBmcm9tIHRyYWRpdGlvbmFsIHNvdXJjZXMgbGlrZSBwYXRlbnRzLCBjb3B5cmlnaHRzLCBhbmQgbWluZXJhbCByaWdodHMsIGFzIHdlbGwgYXMgYW55IGZyb20gZGlnaXRhbCBjb250ZW50IHBsYXRmb3JtcyBzdWNoIGFzIFVkZW15LCBZb3VUdWJlLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBTdGF0ZW1lbnQgb2YgRWFybmluZ3M6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlIHJveWFsdHkgaW5jb21lIGZyb20gc291cmNlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgMTA5OS1NSVNDLCBvciBpbiBhZGRpdGlvbiB0byB0aG9zZSB0aGF0IGRvLCB3ZSBuZWVkIGEgZGV0YWlsZWQgc3RhdGVtZW50IG9yIGxvZyBvZiB0aGVzZSBlYXJuaW5ncy4gVGhpcyBzaG91bGQgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdlbmVyYXRpb24gb2YgdGhpcyByb3lhbHR5IGluY29tZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYXJrZXRpbmcsIHByb2R1Y3Rpb24sIGFuZCBsZWdhbCBleHBlbnNlcy4gUGxlYXNlIHByb3ZpZGUgcmVjZWlwdHMsIGludm9pY2VzLCBvciBhIGRldGFpbGVkIGV4cGVuc2UgbG9nLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGlnaXRhbCBDb250ZW50IFBsYXRmb3JtIFJlcG9ydHM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgYW55IHllYXItZW5kIHN1bW1hcnkgcmVwb3J0cyBvciBpbmNvbWUgc3RhdGVtZW50cyBwcm92aWRlZCBieSBkaWdpdGFsIHBsYXRmb3JtcyB3aGVyZSB5b3VyIGNvbnRlbnQgaXMgaG9zdGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFdpdGhob2xkaW5nIE5vdGljZXM6PC9zdHJvbmc+IElmIHRheCB3YXMgd2l0aGhlbGQgZnJvbSBhbnkgb2YgeW91ciByb3lhbHR5IHBheW1lbnRzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIG5vdGljZXMgaW5kaWNhdGluZyB0aGUgYW1vdW50IHdpdGhoZWxkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGVzZSBkb2N1bWVudHMgYW5kIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoYXQgeW91ciB0YXggcHJlcGFyYXRpb24gaXMgYm90aCBhY2N1cmF0ZSBhbmQgbWF4aW1pemVkIGZvciB5b3VyIGJlbmVmaXQuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBpdGVtcywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIG93bmluZyByZW50YWwgcHJvcGVydGllcyB0aGF0IG9wZXJhdGUgYXMgYSBIb3RlbCwgTW90ZWwsIEJlZCBhbmQgQnJlYWtmYXN0LCBvciBvZmZlciBzaG9ydC10ZXJtIGFjY29tbW9kYXRpb25zIHNpbWlsYXIgdG8gQWlyYm5iLiBUbyBlbnN1cmUgd2UgY2FuIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3Qgc2VydmljZSBhbmQgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb3BlcnR5IHlvdSByZW50IG91dCBvbiBhIHNob3J0LXRlcm0gYmFzaXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgUmVjb3Jkczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20gdGhlc2UgcHJvcGVydGllcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byByZW50YWwgaW5jb21lLCBjbGVhbmluZyBmZWVzLCBhbmQgYW55IG90aGVyIGNoYXJnZXMgdG8gcmVudGVycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjb3Jkczo8L3N0cm9uZz4gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggcmVudGFsIGFjdGl2aXR5LiBUaGlzIGluY2x1ZGVzIG1vcnRnYWdlIGludGVyZXN0LCBwcm9wZXJ0eSB0YXhlcywgaW5zdXJhbmNlLCByZXBhaXJzIGFuZCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBtYW5hZ2VtZW50IGZlZXMsIGFuZCBhZHZlcnRpc2luZyBjb3N0cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk9jY3VwYW5jeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTnVtYmVyIG9mIGRheXMgZWFjaCBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBkdXJpbmcgdGhlIHllYXIsIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBkYXlzIGl0IHdhcyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3NlcywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxlZ2FsIERvY3VtZW50YXRpb246PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbG9jYWwgbGljZW5zZXMsIHBlcm1pdHMsIG9yIHJlZ2lzdHJhdGlvbnMgcmVxdWlyZWQgZm9yIG9wZXJhdGluZyB0aGVzZSByZW50YWwgcHJvcGVydGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgY2hvb3Npbmcgb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZWNlbnQgY29uZmlybWF0aW9uIHJlZ2FyZGluZyByZWNlaXZpbmcgcGF5bWVudHMgb3IgcmVmdW5kcyBjb25zaWRlcmVkIGEgJ1RheGFibGUgUmVjb3ZlcnknIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGluY29ycG9yYXRlIHRoaXMgaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzLiBDb3VsZCB5b3UgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbjxvbD5cclxuICA8bGk+PGI+QW1vdW50IG9mIFRheGFibGUgUmVjb3Zlcnk6PC9iPiBUaGUgdG90YWwgc3VtIG9mIGFsbCBwYXltZW50cyBvciByZWZ1bmRzIHJlY2VpdmVkIHRoYXQgYXJlIGNsYXNzaWZpZWQgYXMgdGF4YWJsZSByZWNvdmVyeS48L2xpPlxyXG4gIDxsaT48Yj5Tb3VyY2UgRG9jdW1lbnRhdGlvbjo8L2I+IFBsZWFzZSBwcm92aWRlIGFueSBvZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50cyBjb25maXJtaW5nIHRoZXNlIHBheW1lbnRzIG9yIHJlZnVuZHMuIFRoaXMgY291bGQgaW5jbHVkZSBiYW5rIHN0YXRlbWVudHMsIHJlZnVuZCBvciBjb21wZW5zYXRpb24gbGV0dGVycywgb3IgYW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24uPC9saT5cclxuICA8bGk+PGI+TmF0dXJlIG9mIHRoZSBPcmlnaW5hbCBEZWR1Y3Rpb24gb3IgQ3JlZGl0OjwvYj4gQSBicmllZiBleHBsYW5hdGlvbiBvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBleHBlbnNlIG9yIGludmVzdG1lbnQgdGhhdCBsZWQgdG8gdGhlIHRheGFibGUgcmVjb3ZlcnkuIFRoaXMgaW5jbHVkZXMgdGhlIHRheCB5ZWFyIG9mIHRoZSBkZWR1Y3Rpb24gb3IgY3JlZGl0LjwvbGk+XHJcbiAgPGxpPjxiPkRhdGUgUmVjZWl2ZWQ6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZXMgd2hlbiB0aGVzZSBwYXltZW50cyBvciByZWZ1bmRzIHdlcmUgcmVjZWl2ZWQuPC9saT5cclxuICA8bGk+PGI+QW55IFJlbGF0ZWQgRXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvYj4gSWYgdGhlcmUgd2VyZSBhbnkgZXhwZW5zZXMgaW5jdXJyZWQgdG8gcmVjZWl2ZSB0aGlzIHJlY292ZXJ5IChzdWNoIGFzIGxlZ2FsIGZlZXMpLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIHVzIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIGNvbXBsaWVzIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRheGFibGUgcmVjb3ZlcmllcywgcGxlYXNlIHByb3ZpZGUgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGZvciBlYWNoIHNlcGFyYXRlIGluc3RhbmNlLjwvcD5cclxuPHA+UGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBuZWVkIGFueSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLiBXZSBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIEFsaW1vbnlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQWxpbW9ueVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uIGZvciB5b3VyIHRheCBwcmVwYXJhdGlvbi4gV2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIGFsaW1vbnkgcGF5bWVudHMgaW4gdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNsdWRlIHRoaXMgaW4geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGFuZCBkb2N1bWVudHMgYmFzZWQgb24gdGhlIGRhdGUgb2YgeW91ciBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LjwvcD5cclxuICAgIDxwPkFsaW1vbnkgcGF5bWVudHMgYXJlIGNvbnNpZGVyZWQgdGF4YWJsZSBpbmNvbWUgZm9yIHRoZSByZWNlaXZlciBkZXBlbmRpbmcgb24gdGhlIGRhdGUgb2YgdGhlIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQuIERpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnRzIGV4ZWN1dGVkIGFmdGVyIERlY2VtYmVyIDMxLCAyMDE4LCBkbyBub3QgY291bnQgYWxpbW9ueSBwYXltZW50cyBhcyB0YXhhYmxlIGluY29tZS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgdG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcGF5bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgeW91ciBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50Ojwvc3Ryb25nPiBUaGlzIGRldGVybWluZXMgd2hldGhlciB0aGUgYWxpbW9ueSBwYXltZW50cyB5b3UgcmVjZWl2ZWQgYXJlIHRheGFibGUuIFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiB0aGUgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkIHRoaXMgdGF4IHllYXI6PC9zdHJvbmc+IFRvdGFsIGFubnVhbCBhbW91bnQgcmVjZWl2ZWQgaW4gYWxpbW9ueSBwYXltZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gY29uZmlybWluZyBhbGltb255IHBheW1lbnRzOjwvc3Ryb25nPiBCYW5rIHN0YXRlbWVudHMsIHRyYW5zZmVyIHJlY2VpcHRzLCBvciBhbnkgbGVnYWwgZG9jdW1lbnRzIHNob3dpbmcgdGhlIGFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5ZXLigJlzIGluZm9ybWF0aW9uOjwvc3Ryb25nPiBGdWxsIG5hbWUgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb2YgdGhlIHBlcnNvbiBmcm9tIHdob20geW91IGhhdmUgcmVjZWl2ZWQgdGhlIGFsaW1vbnkgcGF5bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgaXMgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZXBvcnRlZCByZWNlaXZpbmcgZ292ZXJubWVudCBiZW5lZml0cyB0aGF0IG1heSBiZSB0YXhhYmxlIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgZmlsaW5nLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gMTA5OS1HIGZvciBlYWNoIGluc3RhbmNlIG9mIGdvdmVybm1lbnQgYmVuZWZpdHMgcmVjZWl2ZWQuIFRoaXMgZm9ybSBpcyB0eXBpY2FsbHkgaXNzdWVkIGZvciB1bmVtcGxveW1lbnQgY29tcGVuc2F0aW9uLCBzdGF0ZSBvciBsb2NhbCBpbmNvbWUgdGF4IHJlZnVuZHMsIGNyZWRpdHMgb3Igb2Zmc2V0cywgYW5kIG90aGVyIGdvdmVybm1lbnQgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgbGlzdCBvZiBiZW5lZml0cyByZWNlaXZlZDo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmVkIGdvdmVybm1lbnQgYmVuZWZpdHMgbm90IHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HIChzdWNoIGFzIGNlcnRhaW4gd2VsZmFyZSBiZW5lZml0cyksIHBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgbGlzdCBpbmNsdWRpbmcgdGhlIHR5cGUgb2YgYmVuZWZpdCwgYW1vdW50IHJlY2VpdmVkLCBhbmQgdGhlIGFnZW5jeSB0aGF0IHByb3ZpZGVkIHRoZSBiZW5lZml0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBCZW5lZml0czo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmVkIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cywgaW5jbHVkZSB5b3VyIFNTQS0xMDk5IG9yIFJSQi0xMDk5IGZvcm0gd2hpY2ggcmVwb3J0cyB0aGVzZSBlYXJuaW5ncy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBhbnkgd2l0aGhlbGQgdGF4ZXM6PC9zdHJvbmc+IElmIHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSBhbnkgYmVuZWZpdHMgcmVjZWl2ZWQsIGluY2x1ZGUgdGhlIGFwcGxpY2FibGUgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugc2VuZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBwcm9jZXNzZWQgdGltZWx5IGFuZCBjb3JyZWN0bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLiBBcyB5b3UndmUgaW5kaWNhdGVkIHJlY2VpcHQgb2YgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMvaW5mb3JtYXRpb24gdG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSB0YXggZmlsaW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBCZW5lZml0IFN0YXRlbWVudCAoRm9ybSBTU0EtMTA5OSk8L3N0cm9uZz4gLSBUaGlzIGZvcm0gZGV0YWlscyB0aGUgdG90YWwgYW1vdW50IG9mIHNvY2lhbCBzZWN1cml0eSBiZW5lZml0cyByZWNlaXZlZC4gSWYgeW91IGhhdmUgbWlzcGxhY2VkIHRoaXMgZm9ybSwgaXQgY2FuIGJlIG9idGFpbmVkIG9ubGluZSB0aHJvdWdoIHlvdXIgU29jaWFsIFNlY3VyaXR5IGFjY291bnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPk5vdGljZSBvZiBBZGp1c3RlZCBBbW91bnQ8L3N0cm9uZz4gKGlmIGFwcGxpY2FibGUpIC0gSWYgdGhlcmUgaGF2ZSBiZWVuIGFueSBhZGp1c3RtZW50cyBvciBjb3JyZWN0aW9ucyB0byB5b3VyIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cyBkdXJpbmcgdGhlIHllYXIsIHBsZWFzZSBwcm92aWRlIGFueSBub3RpY2VzIG9yIGRvY3VtZW50YXRpb24gcmVmbGVjdGluZyB0aGVzZSBjaGFuZ2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5TdXBwbGVtZW50YWwgU2VjdXJpdHkgSW5jb21lIChTU0kpPC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIEFsdGhvdWdoIFNTSSBpcyB0eXBpY2FsbHkgbm90IHRheGFibGUsIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgcGF5bWVudHMgaXMgc3RpbGwgcmVxdWlyZWQgZm9yIGNvbXByZWhlbnNpdmUgZmluYW5jaWFsIGFzc2Vzc21lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgZGV0ZXJtaW5pbmcgdGhlIHRheGFibGUgcG9ydGlvbiBvZiB5b3VyIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cywgaWYgYW55LCBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy4gRmFpbHVyZSB0byBwcm92aWRlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBtYXkgcmVzdWx0IGluIGRlbGF5cyBvciBpbmFjY3VyYWNpZXMgaW4geW91ciB0YXggZmlsaW5nLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoZXNlIG1hdHRlcnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdhbWJsaW5nIFdpbm5pbmdzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHYW1ibGluZyBXaW5uaW5nc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciBwcmV2aW91cyBhbnN3ZXJzIHRoYXQgeW91IGhhdmUgZXhwZXJpZW5jZWQgZ2FtYmxpbmcgd2lubmluZ3MgdGhpcyB0YXggeWVhciBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgb3Igb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCBpdCdzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHdpbm5pbmdzLjwvcD5cclxuPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gZm9yIEVhY2ggV2lubmluZzo8L3N0cm9uZz4gVGhpcyBjYW4gaW5jbHVkZSBXLTJHIGZvcm1zLCBzdGF0ZW1lbnRzIGZyb20gY2FzaW5vcywgcmFjZXRyYWNrcywgb3Igb3RoZXIgZ2FtYmxpbmcgZXN0YWJsaXNobWVudHMsIGFuZCBhbnkgb3RoZXIgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB0aGF0IHJlcG9ydHMgeW91ciB3aW5uaW5ncy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRhdGVzIG9mIFdpbm5pbmdzOjwvc3Ryb25nPiBUaGUgc3BlY2lmaWMgZGF0ZXMgb24gd2hpY2ggeW91IGhhZCBnYW1ibGluZyB3aW5uaW5ncy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlR5cGVzIG9mIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IFBsZWFzZSBzcGVjaWZ5IHdoZXRoZXIgeW91ciB3aW5uaW5ncyB3ZXJlIGZyb20gbG90dGVyaWVzLCBjYXNpbm9zLCBiZXR0aW5nLCBzcG9ydHMgYmV0dGluZywgZ2FtZXMgb2YgY2hhbmNlLCBvciBhbnkgb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuPC9saT5cclxuICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgV2lubmluZ3M6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgd29uIGZyb20gZWFjaCBnYW1ibGluZyBhY3Rpdml0eS4gUGxlYXNlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBjYXNoIHdpbm5pbmdzIGFuZCB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYW55IG5vbi1jYXNoIHByaXplcy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkV4cGVuc2VzIFJlbGF0ZWQgdG8gR2FtYmxpbmcgQWN0aXZpdGllczo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgbGlzdCBhbnkgZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIGdhbWJsaW5nIGFjdGl2aXRpZXMsIHN1Y2ggYXMgYnV5LWlucyBvciB0cmF2ZWwgZXhwZW5zZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlIGRlZHVjdGliaWxpdHkgb2YgdGhlc2UgZXhwZW5zZXMgbWF5IHZhcnkuPC9saT5cclxuICA8bGk+PHN0cm9uZz5Mb3NzZXM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIHJlY29yZHMgb2YgeW91ciBsb3NzZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgbG9zc2VzIGFzIHRoZXkgY2FuIHBvdGVudGlhbGx5IG9mZnNldCB5b3VyIHdpbm5pbmdzIGZvciB0YXggcHVycG9zZXMuIE5vdGUsIGxvc3NlcyBjYW4gb25seSBiZSBjbGFpbWVkIHVwIHRvIHRoZSBhbW91bnQgb2YgdG90YWwgd2lubmluZ3MuPC9saT5cclxuPC9vbD5cclxuPHA+SXQncyBpbXBvcnRhbnQgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSByZXBvcnQgeW91ciBnYW1ibGluZyB3aW5uaW5ncyBhbmQgYW55IHJlbGF0ZWQgZGVkdWN0aW9ucyBvciBsb3NzZXMgb24geW91ciB0YXggcmV0dXJuLiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGFzIGRldGFpbGVkIGFuZCBhY2N1cmF0ZSBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbjxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBvciBpZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UncmUgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2FuY2VsbGF0aW9uIG9mIERlYnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+T3VyIHJlY29yZHMgaW5kaWNhdGUgeW91J3ZlIGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIGhhdmluZyBkZWJ0cyBmb3JnaXZlbiwgY2FuY2VsZWQsIG9yIGRpc2NoYXJnZWQgZm9yIGxlc3MgdGhhbiB0aGUgYW1vdW50IHlvdSBvd2VkIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluZm9ybWF0aW9uIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZXhwbG9yZSBhbnkgYXBwbGljYWJsZSB0YXggcmVsaWVmIG9yIGV4Y2x1c2lvbnMsIHdlIG5lZWQgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbjxsaT48c3Ryb25nPkZvcm0gMTA5OS1DPC9zdHJvbmc+OiBDb3BpZXMgb2YgYW55IEZvcm0gMTA5OS1DIHlvdSByZWNlaXZlZCByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC48L2xpPlxyXG48bGk+PHN0cm9uZz5EZXRhaWxlZCBMaXN0IG9mIERlYnRzPC9zdHJvbmc+OiBJZiB5b3UgZGlkbid0IHJlY2VpdmUgYSBGb3JtIDEwOTktQywgcGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFueSBkZWJ0cyB0aGF0IHdlcmUgY2FuY2VsZWQsIGluY2x1ZGluZzpcclxuICAgIDx1bD5cclxuICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgY3JlZGl0b3I8L2xpPlxyXG4gICAgPGxpPlRoZSBvcmlnaW5hbCBhbW91bnQgb2YgdGhlIGRlYnQ8L2xpPlxyXG4gICAgPGxpPlRoZSBhbW91bnQgY2FuY2VsZWQ8L2xpPlxyXG4gICAgPGxpPlRoZSBkYXRlIG9mIGNhbmNlbGxhdGlvbjwvbGk+XHJcbiAgICA8L3VsPlxyXG48L2xpPlxyXG48bGk+PHN0cm9uZz5FeHBsYW5hdGlvbiBvZiBDaXJjdW1zdGFuY2VzPC9zdHJvbmc+OiBBIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHRoZSBjaXJjdW1zdGFuY2VzIGxlYWRpbmcgdG8gdGhlIGRlYnQgY2FuY2VsbGF0aW9uIChlLmcuLCBmaW5hbmNpYWwgaGFyZHNoaXAsIHJldHVybiBvZiBwdXJjaGFzZWQgZ29vZHMsIGV0Yy4pLjwvbGk+XHJcbjxsaT48c3Ryb25nPkluc29sdmVuY3kgRG9jdW1lbnRhdGlvbjwvc3Ryb25nPjogSWYgeW91IHdlcmUgaW5zb2x2ZW50ICh3aGVyZSB5b3VyIHRvdGFsIGRlYnRzIGV4Y2VlZGVkIHlvdXIgdG90YWwgYXNzZXRzKSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGNhbmNlbGxhdGlvbiwgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgZmluYW5jaWFsIHN0YXR1cyBhdCB0aGF0IHRpbWUuPC9saT5cclxuPC9vbD5cclxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgd2UgYWNjdXJhdGVseSByZXBvcnQgeW91ciBmaW5hbmNpYWwgaW5mb3JtYXRpb24gYW5kIHRha2UgYWR2YW50YWdlIG9mIGFueSBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gdGhlIGNhbmNlbGxhdGlvbiBvZiBkZWJ0LiBQbGVhc2UgdXBsb2FkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cclxuPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByaW1hcnkgUmVzaWRlbmNlIERlYnQgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBhIHBvcnRpb24gb2YgeW91ciBtb3J0Z2FnZSBmb3IgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSB3YXMgZm9yZ2l2ZW4sIGNhbmNlbGVkLCBvciBkaXNjaGFyZ2VkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGlzIGluIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+Rm9ybSAxMDk5LUMsIENhbmNlbGxhdGlvbiBvZiBEZWJ0OjwvYj4gVGhpcyBpcyBhIGNydWNpYWwgZG9jdW1lbnQgdGhhdCBsZW5kZXJzIG11c3Qgc2VuZCB5b3UgaWYgdGhleSBjYW5jZWxlZCBvciBmb3JnYXZlIGEgZGVidCBleGNlZWRpbmcgJDYwMC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Xcml0dGVuIGNvbW11bmljYXRpb24gZnJvbSB5b3VyIGxlbmRlcjo8L2I+IEFueSBsZXR0ZXJzIG9yIG9mZmljaWFsIGRvY3VtZW50cyBmcm9tIHlvdXIgbGVuZGVyIHJlZ2FyZGluZyB0aGUgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlIG9mIHlvdXIgbW9ydGdhZ2UgZGVidC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Nb3J0Z2FnZSBzdGF0ZW1lbnRzOjwvYj4gUGxlYXNlIHByb3ZpZGUgbW9ydGdhZ2Ugc3RhdGVtZW50cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiB0byBzaG93IHRoZSBjaGFuZ2UgaW4geW91ciBtb3J0Z2FnZSBiYWxhbmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgcHJvcGVydHk6PC9iPiBUaGlzIGluY2x1ZGVzOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+WW91ciBtb3J0Z2FnZSBjb250cmFjdC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgcmVsYXRlZCB0byBmb3JlY2xvc3VyZSwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgYSBzaG9ydCBzYWxlLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVjb3JkIG9mIHBheW1lbnRzIG1hZGU6PC9iPiBJZiB5b3UgbWFkZSBhbnkgcGF5bWVudHMgdG93YXJkcyB0aGUgbW9ydGdhZ2UgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgc3RhdGVtZW50cyBpbmRpY2F0aW5nIHRoZXNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcHJvdmlkZSB0aGVtIHRvIHVzLiBJZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBvYnRhaW5pbmcgYW55IG9mIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gaW4gYSB0aW1lbHkgbWFubmVyIGlzIGNydWNpYWwgZm9yIHRoZSBhY2N1cmF0ZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0dWRlbnQgTG9hbiBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU3R1ZGVudCBMb2FuIERlYnQgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkluIHJlc3BvbnNlIHRvIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiBzdHVkZW50IGxvYW4gZGVidCBkdXJpbmcgdGhpcyB0YXggeWVhciwgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJvY2VzcyB5b3VyIHRheCByZXR1cm4uIFRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBDYW5jZWxsYXRpb24gb3IgRm9yZ2l2ZW5lc3MgTm90aWNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIGxldHRlciBvciBub3RpY2UgZnJvbSB0aGUgbGVuZGVyIG9yIHByb2dyYW0gYWRtaW5pc3RyYXRvciBjb25maXJtaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2YgeW91ciBzdHVkZW50IGxvYW4gZGVidC48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlN0dWRlbnQgTG9hbiBBY2NvdW50IFN0YXRlbWVudDo8L3N0cm9uZz4gQSBzdGF0ZW1lbnQgZnJvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsb2FuIGZvcmdpdmVuZXNzLCBjYW5jZWxsYXRpb24sIG9yIGRpc2NoYXJnZSBvY2N1cnJlZCwgc2hvd2luZyB0aGUgb3V0c3RhbmRpbmcgYmFsYW5jZSBhbmQgdGhlIGJhbGFuY2UgYWZ0ZXIgdGhlIGFjdGlvbiB3YXMgdGFrZW4uPC9saT5cclxuICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFF1YWxpZnlpbmcgUHJvZ3JhbSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgY2VydGlmaWNhdGVzIG9mIHlvdXIgcGFydGljaXBhdGlvbiBpbiBxdWFsaWZ5aW5nIHByb2dyYW1zIHN1Y2ggYXMgUHVibGljIFNlcnZpY2UgTG9hbiBGb3JnaXZlbmVzcyAoUFNMRikgb3IgVGVhY2hlciBMb2FuIEZvcmdpdmVuZXNzLCBhbW9uZyBvdGhlcnMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5JUlMgRm9ybSAxMDk5LUMgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGlzc3VlZCBieSBzb21lIGxlbmRlcnMgd2hlbiBhIGRlYnQgaXMgZm9yZ2l2ZW4gb3IgY2FuY2VsZWQgYW5kIGlzIGNydWNpYWwgZm9yIHRheCByZXBvcnRpbmcgcHVycG9zZXMuIEl0IGluY2x1ZGVzIHRoZSBhbW91bnQgb2YgZm9yZ2l2ZW4gZGVidCB0aGF0IG1heSBiZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgRGVzY3JpcHRpb24gb2YgQ2lyY3Vtc3RhbmNlczo8L3N0cm9uZz4gQSB3cml0dGVuIGV4cGxhbmF0aW9uIG9mIHRoZSBjaXJjdW1zdGFuY2VzIGxlYWRpbmcgdG8gdGhlIGxvYW4ncyBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2UsIGluY2x1ZGluZyBhbnkgZG9jdW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIHlvdXIgZWxpZ2liaWxpdHkgdW5kZXIgdGhlIHNwZWNpZmljIHByb2dyYW0gb3IgY29uZGl0aW9uLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIHByb3ZpZGVkIGFyZSBjb21wbGV0ZSBhbmQgbGVnaWJsZS4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBzZWN1cmVseSB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsLjwvcD5cclxuPHA+WW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCB3aWxsIGVuYWJsZSB1cyB0byBhY2N1cmF0ZWx5IGFuZCBlZmZpY2llbnRseSBjb21wbGV0ZSB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG48cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSG9iYnkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJIb2JieSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGluY29tZSBzb3VyY2VzIGZvciB0aGlzIHRheCB5ZWFyLiBBcyBwYXJ0IG9mIG91ciBwcmVwYXJhdGlvbiBmb3IgeW91ciB0YXggcmV0dXJuLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSd2ZSBlYXJuZWQgbW9uZXkgZnJvbSBob2JiaWVzLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIHRvIHRoZSBJUlMgYW5kIGVuc3VyZSB5b3UgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBIb2JieSBJbmNvbWU6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20geW91ciBob2JieSBhY3Rpdml0aWVzLiBQbGVhc2UgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb2YgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBob2JieSBhY3Rpdml0aWVzLiBUaGlzIGNhbiBpbmNsdWRlIG1hdGVyaWFscywgZXF1aXBtZW50LCBhbmQgYW55IG90aGVyIGNvc3RzIGluY3VycmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYmFuayBzdGF0ZW1lbnRzIHRoYXQgc2hvdyB0aGUgdHJhbnNhY3Rpb25zIHJlbGF0ZWQgdG8geW91ciBob2JieSBpbmNvbWUgYW5kIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUHJpemVzOjwvc3Ryb25nPiBJZiB5b3VyIGhvYmJ5IGluY29tZSBpbmNsdWRlcyBwcml6ZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgcmVjZWlwdHMgdGhhdCBkZXRhaWwgdGhlc2UgYXdhcmRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+T3RoZXIgUmVsZXZhbnQgRG9jdW1lbnRzOjwvc3Ryb25nPiBBbnkgb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHRoZSBpbmNvbWUgYW5kIGV4cGVuc2VzIHJlcG9ydGVkIGZvciB5b3VyIGhvYmJ5IGFjdGl2aXRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGF2b2lkIGRlbGF5cyBpbiB0aGUgdGF4IHJldHVybiBwcm9jZXNzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2VydGFpbiBDb3VydCBBd2FyZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNlcnRhaW4gQ291cnQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBjb3VydCBhd2FyZHMgb3Igc2V0dGxlbWVudHMgaW4gdGhlIHBhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBhbW91bnRzIGFuZCBjb21wbHkgd2l0aCB0YXggb2JsaWdhdGlvbnMsIHdlIG5lZWQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSBhd2FyZHMgb3Igc2V0dGxlbWVudHMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UeXBlIG9mIEF3YXJkIG9yIFNldHRsZW1lbnQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIG5hdHVyZSAoZS5nLiwgbG9zdCB3YWdlcywgcHVuaXRpdmUgZGFtYWdlcywgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgYXdhcmRlZCBvciBzZXR0bGVkLCBiZWZvcmUgYW55IGRlZHVjdGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIFJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSB3aGVuIHlvdSByZWNlaXZlZCB0aGUgY29tcGVuc2F0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50cyBvciBqdWRnbWVudHMgcGVydGFpbmluZyB0byB0aGUgYXdhcmQgb3Igc2V0dGxlbWVudC4gVGhpcyBpbmNsdWRlcyBjb3VydCBvcmRlcnMsIGFncmVlbWVudCBsZXR0ZXJzLCBhbmQgcmVjZWlwdHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UYXggV2l0aGhlbGQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHRoZSBhbW91bnQgb2YgZmVkZXJhbCBvciBzdGF0ZSB0YXggYWxyZWFkeSB3aXRoaGVsZCBmcm9tIHRoZSBzZXR0bGVtZW50LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SXQncyBpbXBlcmF0aXZlIHdlIHJlY2VpdmUgdGhpcyBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIGNvdXJ0IGF3YXJkIG9yIHNldHRsZW1lbnQuIEZhaWx1cmUgdG8gcmVwb3J0IHN1Y2ggaW5jb21lIGFjY3VyYXRlbHkgY291bGQgcmVzdWx0IGluIHBlbmFsdGllcyBvciBhdWRpdHMgZnJvbSB0aGUgSVJTLjwvcD4gXHJcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGhhdmUgYW1wbGUgdGltZSBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcml6ZXMgYW5kIEF3YXJkc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4sIHdlIGhhdmUgaWRlbnRpZmllZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHByaXplcyBvciBhd2FyZHMgaW4gdGhlIGZvcm0gb2YgY2FzaCwgZ29vZHMsIG9yIHNlcnZpY2VzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIHRvIHRoZSBJUlMsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMgZnJvbSB5b3UuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBFYWNoIFByaXplIG9yIEF3YXJkOjwvc3Ryb25nPiBCcmllZmx5IGRlc2NyaWJlIGVhY2ggcHJpemUgb3IgYXdhcmQgcmVjZWl2ZWQsIGluY2x1ZGluZyB0aGUgbmF0dXJlIChjYXNoLCBnb29kcywgc2VydmljZXMpIGFuZCBjb250ZXh0IChjb250ZXN0LCBhY2hpZXZlbWVudCBhd2FyZCwgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBFYWNoIFByaXplIG9yIEF3YXJkOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBlYWNoIHByaXplIG9yIGF3YXJkIGF0IHRoZSB0aW1lIG9mIHJlY2VpcHQuIElmIHRoZSBwcml6ZSB3YXMgaW4gY2FzaCwgc3BlY2lmeSB0aGUgYW1vdW50LiBJZiBpbiBnb29kcyBvciBzZXJ2aWNlcywgcHJvdmlkZSBhbiBlc3RpbWF0ZWQgdmFsdWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgb24gd2hpY2ggZWFjaCBwcml6ZSBvciBhd2FyZCB3YXMgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Jc3N1ZXIgSW5mb3JtYXRpb246PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gKGlmIGF2YWlsYWJsZSkgb2YgdGhlIG9yZ2FuaXphdGlvbiBvciBlbnRpdHkgdGhhdCBhd2FyZGVkIHRoZSBwcml6ZSBvciBwcm92aWRlZCB0aGUgYXdhcmQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgV2l0aGhlbGQgVGF4ZXM6PC9zdHJvbmc+IEluZGljYXRlIGlmIGFueSB0YXhlcyB3ZXJlIHdpdGhoZWxkIGZyb20gdGhlIGF3YXJkZWQgYW1vdW50IGFuZCBwcm92aWRlIHRoZSB3aXRoaG9sZGluZyBkb2N1bWVudChzKSwgaWYgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SXQncyBjcnVjaWFsIGZvciB0YXggcHVycG9zZXMgdGhhdCB3ZSByZXBvcnQgdGhlc2UgYWNjdXJhdGVseSB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBJUlMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIGEgd2l0aGRyYXdhbCBmcm9tIGEgQ292ZXJkZWxsIEVkdWNhdGlvbiBTYXZpbmdzIEFjY291bnQgKEVTQSkgb3IgYW4gRWR1Y2F0aW9uIElSQSBmb3IgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGRpc3RyaWJ1dGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHdpdGhkcmF3biBmcm9tIHRoZSBDb3ZlcmRlbGwgRVNBIG9yIEVkdWNhdGlvbiBJUkEuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgYnJlYWtkb3duIG9mIGhvdyB0aGVzZSBmdW5kcyB3ZXJlIHV0aWxpemVkLCBzcGVjaWZpY2FsbHk6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgdXNlZCBmb3IgdHVpdGlvbiBhbmQgZmVlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCBzcGVudCBvbiBib29rcywgc3VwcGxpZXMsIGFuZCBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBhbW91bnRzIHNwZW50IG9uIHJvb20gYW5kIGJvYXJkLCBzcGVjaWZ5aW5nIGlmIHRoZSBiZW5lZmljaWFyeSB3YXMgZW5yb2xsZWQgYXQgbGVhc3QgaGFsZi10aW1lLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcXVhbGlmaWVkIGVkdWNhdGlvbiBleHBlbnNlcyBwYWlkIHVzaW5nIHRoZXNlIGZ1bmRzLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgdGhlIGJlbmVmaWNpYXJ5J3MgZW5yb2xsbWVudCBzdGF0dXMgKGUuZy4sIHR1aXRpb24gc3RhdGVtZW50LCBlbnJvbGxtZW50IHZlcmlmaWNhdGlvbikuPC9saT5cclxuICAgICAgICA8bGk+VGhlIG5hbWUgYW5kIGFkZHJlc3Mgb2YgdGhlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uKHMpIGludm9sdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBGb3JtIDEwOTktUSByZWNlaXZlZCBwZXJ0YWluaW5nIHRvIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhpcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHdlIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gZWR1Y2F0aW9uIGV4cGVuc2VzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCBsZXQgdXMga25vdyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIG9yIGhhdmUgYW55IHF1ZXN0aW9ucy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBRVFAgRGlzdHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBRVFAgRGlzdHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGlzdHJpYnV0aW9ucyBmcm9tIGEgUXVhbGlmaWVkIFR1aXRpb24gUHJvZ3JhbSAoUVRQKSwgY29tbW9ubHkga25vd24gYXMgYSA1MjkgcGxhbiwgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiByZWxhdGVkIHRvIHRoZXNlIGRpc3RyaWJ1dGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5BY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBvZiB0aGUgYWNjb3VudCBob2xkZXIgYW5kIHRoZSBiZW5lZmljaWFyeSBmb3IgZWFjaCA1MjkgcGxhbiBkaXN0cmlidXRpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRpc3RyaWJ1dGlvbiBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIDEwOTktUSBmb3JtcyByZWNlaXZlZCBmb3IgZWFjaCBkaXN0cmlidXRpb24gdGhpcyB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIERpc3RyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgb2YgbW9uZXkgZGlzdHJpYnV0ZWQgZnJvbSB0aGUgUVRQIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkVkdWNhdGlvbmFsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGZvciB3aGljaCB0aGUgUVRQIGRpc3RyaWJ1dGlvbnMgd2VyZSB1c2VkLiBUaGlzIGluY2x1ZGVzIHR1aXRpb24sIGJvb2tzLCBzdXBwbGllcywgYW5kIGFueSBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNlaXB0czo8L3N0cm9uZz4gUmVjZWlwdHMgb3Igc3RhdGVtZW50cyB0aGF0IHByb3ZpZGUgcHJvb2Ygb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5JbnN0aXR1dGlvbiBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTmFtZSBhbmQgYWRkcmVzcyBvZiB0aGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24ocykgd2hlcmUgdGhlIGV4cGVuc2VzIHdlcmUgaW5jdXJyZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlJlY2lwaWVudCdzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCAodGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSA1MjkgcGxhbikgYW5kIHRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cclxuPC9vbD5cclxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGRldGVybWluaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHRoZSBkaXN0cmlidXRpb25zIGFuZCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cclxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHJpa2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlN0cmlrZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFzIHdlIHdvcmsgdG9nZXRoZXIgdG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSByZWNlaXZlZCBzdHJpa2UgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhciBkdWUgdG8gcGFydGljaXBhdGlvbiBpbiBhIGxhYm9yIHN0cmlrZS4gVG8gZW5zdXJlIGNvbXBsaWFuY2UgYW5kIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgU3RyaWtlIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgc3VtIG9mIHN0cmlrZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U291cmNlIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGVzZSBiZW5lZml0cyB3ZXJlIHBhaWQgYnkgeW91ciB1bmlvbiwgYW4gaW5zdXJhbmNlIHBvbGljeSwgb3IgYW5vdGhlciBzb3VyY2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZm9ybXMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBzaG93IHRoZSByZWNlaXB0IG9mIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgU3RyaWtlIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IExpc3QgdGhlIGRhdGVzIG9yIGR1cmF0aW9uIG9mIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgbGFib3Igc3RyaWtlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBDb3N0cyBvciBFeHBlbnNlczo8L3N0cm9uZz4gSWYgeW91IGluY3VycmVkIGFueSBjb3N0cyBvciBleHBlbnNlcyByZWxhdGVkIHRvIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN0cmlrZSAoZS5nLiwgdHJhdmVsIHRvIHBpY2tldCBsaW5lcywgc2lnbmFnZSBtYXRlcmlhbHMpLCBwbGVhc2UgZGV0YWlsIHRoZXNlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBtYXkgaW1wYWN0IHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkp1cnkgRHV0eSBQYXlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkp1cnkgRHV0eSBQYXlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSByZWFjaGluZyB0aGUgY3JpdGljYWwgc3RhZ2VzIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGp1cnkgZHV0eSBwYXkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmNvbWUgYW5kIGV4cGxvcmUgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIEp1cnkgRHV0eSBQYXk6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciBzZXJ2aW5nIGp1cnkgZHV0eS4gVGhpcyBhbW91bnQgaXMgb2Z0ZW4gcmVwb3J0ZWQgb24gRm9ybSAxMDk5LUcuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5KdXJ5IER1dHkgRGF0ZXM6PC9zdHJvbmc+IFRoZSBkYXRlcyB5b3Ugc2VydmVkIG9uIGp1cnkgZHV0eS4gVGhpcyBoZWxwcyBpbiB2ZXJpZnlpbmcgdGhlIGR1cmF0aW9uIGFuZCBjb3JyZWxhdGluZyBpdCB3aXRoIHRoZSBjb21wZW5zYXRpb24gcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBJZiB5b3VyIGVtcGxveWVyIGNvbXBlbnNhdGVkIHlvdSAoaW4gZnVsbCBvciBwYXJ0KSBmb3IgdGhlIHRpbWUgeW91IHdlcmUgc2VydmluZyBvbiBqdXJ5IGR1dHksIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3VyIGVtcGxveWVyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBTdGF0ZW1lbnRzIG9yIFBheSBTdHViczo8L3N0cm9uZz4gQW55IGJhbmsgc3RhdGVtZW50cyBvciBwYXkgc3R1YnMgc2hvd2luZyB0aGUganVyeSBkdXR5IHBheSBkZXBvc2l0IG9yIGVtcGxveWVyIHJlaW1idXJzZW1lbnRzLiBUaGVzZSBkb2N1bWVudHMgaGVscCBpbiB2ZXJpZnlpbmcgdGhlIGFtb3VudHMgZGVjbGFyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRyAoaWYgcmVjZWl2ZWQpOjwvc3Ryb25nPiBTb21lIGp1cmlzZGljdGlvbnMgcHJvdmlkZSBhIEZvcm0gMTA5OS1HIGZvciBqdXJ5IGR1dHkgcGF5LiBJZiB5b3UgcmVjZWl2ZWQgb25lLCBwbGVhc2UgaW5jbHVkZSBhIGNvcHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHdpbGwgYWxsb3cgdXMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWxhc2thIFBlcm1hbmVudCBGdW5kcyBEaXZpZGVuZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkluIHJldmlld2luZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgZm9yIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbiwgd2Ugbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluZm9ybWF0aW9uIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIGd1aWRlbGluZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPjEwOTktTUlTQyBGb3JtOjwvYj4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSAxMDk5LU1JU0MgZm9ybSBpc3N1ZWQgYnkgdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBDb3Jwb3JhdGlvbi4gVGhpcyBmb3JtIG91dGxpbmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGl2aWRlbmRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PGI+QmFuayBTdGF0ZW1lbnRzOjwvYj4gSWYgcG9zc2libGUsIHByb3ZpZGUgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIGRlcG9zaXQocykgb2YgdGhlIGRpdmlkZW5kcyBpbnRvIHlvdXIgYWNjb3VudC4gVGhpcyBzZXJ2ZXMgYXMgYWRkaXRpb25hbCBwcm9vZiBvZiBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PGI+UGVyc29uYWwgSWRlbnRpZmljYXRpb24gSW5mb3JtYXRpb246PC9iPiBDb25maXJtIHlvdXIgZnVsbCBsZWdhbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gZGlzY3JlcGFuY2llcyBiZXR3ZWVuIG91ciByZWNvcmRzIGFuZCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgb24gdGhlIDEwOTktTUlTQyBmb3JtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlByZXZpb3VzIFllYXIncyBEaXZpZGVuZCBJbmZvcm1hdGlvbjo8L2I+IElmIHlvdSByZWNlaXZlZCBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciBidXQgaGF2ZSBub3QgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIHNvLiBJdCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBjYXJyeW92ZXIgZWZmZWN0cyBvbiB5b3VyIGN1cnJlbnQgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLiBDb21wbGV0aW5nIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB3aWxsIGVuYWJsZSB1cyB0byBwcm9ncmVzcyB3aXRoIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4gZWZmaWNpZW50bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkV4ZWN1dG9yIEZlZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV4ZWN1dG9yIEZlZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCBmcm9tIHlvdXIgcmVjZW50IHJlc3BvbnNlIHRoYXQgeW91IGhhdmUgcGFpZCBvciByZWNlaXZlZCBleGVjdXRvciBmZWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRheCBwcmVwYXJhdGlvbiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZXNlIHRyYW5zYWN0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbjxvbD5cclxuICA8bGk+QSBkZXRhaWxlZCBzdGF0ZW1lbnQgb2YgdGhlIGV4ZWN1dG9yIGZlZXMgcGFpZCBvciByZWNlaXZlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzLjwvbGk+XHJcbiAgPGxpPklmIHlvdSByZWNlaXZlZCBleGVjdXRvciBmZWVzLCBwbGVhc2UgcHJvdmlkZSB5b3VyIHJvbGUgKGUuZy4sIHByaW1hcnkgZXhlY3V0b3IsIGNvLWV4ZWN1dG9yKSBhbmQgdGhlIGVzdGF0ZSdzIG5hbWUuPC9saT5cclxuICA8bGk+SWYgeW91IHBhaWQgZXhlY3V0b3IgZmVlcywgcHJvdmlkZSB0aGUgbmFtZSBhbmQgdGF4IGlkZW50aWZpY2F0aW9uIG51bWJlciAoU1NOIG9yIEVJTikgb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhlIGZlZXMgd2VyZSBwYWlkLjwvbGk+XHJcbiAgPGxpPkFueSBkb2N1bWVudGF0aW9uIHRoYXQgb3V0bGluZXMgdGhlIGFncmVlbWVudCBvciBjb3VydCBvcmRlciByZWdhcmRpbmcgdGhlIGV4ZWN1dG9yIGZlZS48L2xpPlxyXG4gIDxsaT5Db3BpZXMgb2YgYmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgZXZpZGVuY2luZyB0aGUgcGF5bWVudCBvciByZWNlaXB0IG9mIHRoZXNlIGZlZXMuPC9saT5cclxuICA8bGk+Rm9yIGZlZXMgcmVjZWl2ZWQsIHBsZWFzZSBjb25maXJtIHdoZXRoZXIgdGF4ZXMgd2VyZSB3aXRoaGVsZCBvciBub3QuIElmIHNvLCBwcm92aWRlIGEgY29weSBvZiB0aGUgRm9ybSAxMDk5LU1JU0MgeW91IHJlY2VpdmVkLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZXhlY3V0b3IgZmVlcyBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyBndWlkZWxpbmVzLiBQbGVhc2Ugc2VuZCB0aGUgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiB0byB1cyB0byBmYWNpbGl0YXRlIGEgdGltZWx5IGFuZCBhY2N1cmF0ZSB0YXggZmlsaW5nLjwvcD5cclxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFdmVudCBHcmF0dWl0aWVzIGFuZCBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRXZlbnQgR3JhdHVpdGllcyBhbmQgR2lmdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXJ0aWVzIG9yIGV2ZW50cyB5b3UgaG9zdGVkIHRoaXMgdGF4IHllYXIuIFNwZWNpZmljYWxseSwgc2luY2UgeW91IGluZGljYXRlZCB0aGF0IHlvdSByZWNlaXZlZCBnaWZ0cywgZ3JhdHVpdGllcywgb3Igb3RoZXIgZm9ybXMgb2YgY29tcGVuc2F0aW9uIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGV2ZW50cywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBlYWNoIGV2ZW50IGhvc3RlZCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGF0ZSBvZiB0aGUgZXZlbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Mb2NhdGlvbiBvZiB0aGUgZXZlbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BcHByb3hpbWF0ZSBudW1iZXIgb2YgYXR0ZW5kZWVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+UHVycG9zZSBvZiB0aGUgZXZlbnQgKGUuZy4sIHNhbGVzIHByb21vdGlvbiwgY3VzdG9tZXIgYXBwcmVjaWF0aW9uKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gZm9yIGVhY2ggZ2lmdCwgZ3JhdHVpdHksIG9yIGZvcm0gb2YgY29tcGVuc2F0aW9uIHJlY2VpdmVkLCBzdWNoIGFzOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Fc3RpbWF0ZWQgZmFpciBtYXJrZXQgdmFsdWUgYXQgdGhlIHRpbWUgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBwcm92aWRpbmcgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIHJlZ2FyZGluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBpdGVtcyAoZS5nLiwgdGhhbmsgeW91IGxldHRlcnMsIGVtYWlscyBjb25maXJtaW5nIHJlY2VpcHQpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSBob3N0aW5nIHRoZXNlIGV2ZW50cyAoZS5nLiwgY2F0ZXJpbmcsIHZlbnVlIHJlbnRhbCwgZW50ZXJ0YWlubWVudCkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCBpcyBjcnVjaWFsIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgYWxsIGZvcm1zIG9mIGluY29tZSwgaW5jbHVkaW5nIG5vbi1tb25ldGFyeSBjb21wZW5zYXRpb24sIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJRdWFsaWZpZWQgRWR1Y2F0b3IgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgYXBwcm9hY2ggdG8geW91ciB0YXggcHJlcGFyYXRpb24gZm9yIHRoZSBjdXJyZW50IHllYXIsIHlvdSBoYXZlIGluZGljYXRlZCB0aGF0IHlvdSd2ZSBpbmN1cnJlZCBvdXQtb2YtcG9ja2V0IGV4cGVuc2VzIGFzIGEgcXVhbGlmaWVkIGVkdWNhdG9yIGZvciBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzLiBUbyBhY2N1cmF0ZWx5IGNsYWltIHRoZXNlIGRlZHVjdGlvbnMgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5EZXRhaWxlZCBMaXN0IG9mIEV4cGVuc2VzOjwvYj4gQSBicmVha2Rvd24gb2YgYWxsIGNsYXNzcm9vbSBtYXRlcmlhbHMgb3Igc3VwcGxpZXMgcHVyY2hhc2VkLCBpbmNsdWRpbmcgYm9va3MsIHN1cHBsaWVzLCBjb21wdXRlciBlcXVpcG1lbnQgKGhhcmR3YXJlLCBzb2Z0d2FyZSwgYW5kIHNlcnZpY2VzKSwgYW5kIGFueSBvdGhlciByZWxldmFudCBtYXRlcmlhbHMuPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVjZWlwdHMgYW5kIFByb29mIG9mIFBheW1lbnQ6PC9iPiBDb3BpZXMgb2YgcmVjZWlwdHMgb3IgYmFuay9jcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIGZvciBlYWNoIHB1cmNoYXNlIG1hZGUuIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZGF0ZSBvZiBwdXJjaGFzZSBhbmQgdGhlIGl0ZW0gb3Igc2VydmljZSBwdXJjaGFzZWQgYXJlIGNsZWFybHkgdmlzaWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIFB1cmNoYXNlczo8L2I+IFRoZSBzcGVjaWZpYyBkYXRlcyBlYWNoIGl0ZW0gd2FzIHB1cmNoYXNlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlVzYWdlIERvY3VtZW50YXRpb246PC9iPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyBlYWNoIGl0ZW0gcHVyY2hhc2VkIHdhcyB1c2VkIGluIHRoZSBjbGFzc3Jvb20gc2V0dGluZy48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Ub3RhbCBBbW91bnQ6PC9iPiBUaGUgdG90YWwgZG9sbGFyIGFtb3VudCBzcGVudCBvbiB0aGVzZSBtYXRlcmlhbHMgYW5kIHN1cHBsaWVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5VbmRlcnN0YW5kaW5nIHRoYXQgeW91ciB0aW1lIGlzIHZhbHVhYmxlLCB3ZSBhcHByZWNpYXRlIHlvdXIgZWZmb3J0IGluIGNvbXBpbGluZyB0aGlzIGluZm9ybWF0aW9uIHByb21wdGx5LiBUaGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyaW5nIHlvdSBhcmUgY29tcGVuc2F0ZWQgZm9yIHlvdXIgaW52ZXN0bWVudCBpbiBlZHVjYXRpb25hbCBtYXRlcmlhbHMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IGRlbGF5LiBZb3UgY2FuIHNlbmQgdGhlIGRvY3VtZW50cyB0byB1cyBlaXRoZXIgdmlhIGVtYWlsIGF0IHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbSBvciB1cGxvYWQgdGhlbSBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGRlZGljYXRpb24gYXMgYW4gZWR1Y2F0b3IuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFybWVkIEZvcmNlcyBSZXNlcnZpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBSZXNlcnZpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaW5jdXJyZWQgdW5yZWltYnVyc2VkIHRyYXZlbCBleHBlbnNlcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGJlbmVmaWNpYWwgdGF4IGZpbGluZywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgZnJvbSB5b3U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBUcmF2ZWwgRGF0ZXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgbGlzdCBvZiBhbGwgZGF0ZXMgeW91IHRyYXZlbGVkIG1vcmUgdGhhbiAxMDAgbWlsZXMgYXdheSBmcm9tIGhvbWUgdG8gcGVyZm9ybSB5b3VyIHJlc2VydmUgZHV0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXMgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggb2YgdGhlIHRyYXZlbCBkYXRlcyBsaXN0ZWQsIHByb3ZpZGUgcmVjZWlwdHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gZm9yOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICA8bGk+VHJhbnNwb3J0YXRpb24gKGUuZy4sIGdhcyByZWNlaXB0cywgbWlsZWFnZSBsb2dzLCBhaXJwbGFuZSB0aWNrZXRzLCBldGMuKTwvbGk+XHJcbiAgICAgICAgPGxpPkxvZGdpbmcgKG9ubHkgaWYgYW4gb3Zlcm5pZ2h0IHN0YXkgd2FzIHJlcXVpcmVkKTwvbGk+XHJcbiAgICAgICAgPGxpPk1lYWxzIGFuZCBJbmNpZGVudGFsIEV4cGVuc2VzIChkZXRhaWxzIG9uIGVhY2gsIGlmIG5vdCBvcHRpbmcgZm9yIHRoZSBzdGFuZGFyZCBtZWFsIGFsbG93YW5jZSk8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzZXJ2ZSBTdGF0dXM6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIG9yZGVycyBvciBhbnkgZG9jdW1lbnRhdGlvbiBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBhbmQgZHV0aWVzIGFzIGFuIEFybWVkIEZvcmNlcyBSZXNlcnZpc3QgZHVyaW5nIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+U3RhdGVtZW50IG9mIFJlaW1idXJzZW1lbnQ6PC9zdHJvbmc+IEEgZGV0YWlsZWQgYWNjb3VudCBvZiBhbnkgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgZm9yIHRoZSB0cmF2ZWwgZXhwZW5zZXMgY2xhaW1lZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGFyZSBsZWdpYmxlIGFuZCBjbGVhcmx5IGxhYmVsZWQuIFByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUgdG8gYWxsb3cgc3VmZmljaWVudCB0aW1lIGZvciBwcm9jZXNzaW5nIGFuZCBpbmNsdXNpb24gaW4geW91ciB0YXggZmlsaW5nLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBPdXIgdGVhbSBpcyBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJmb3JtaW5nIEFydGlzdCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyZm9ybWluZyBBcnRpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlJ3JlIHJlYWNoaW5nIG91dCB0byBnYXRoZXIgbmVjZXNzYXJ5IGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB5b3VyIGV4cGVuc2VzIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QuIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXRhaWxzIHRoZSBzcGVjaWZpYyBqb2ItcmVsYXRlZCBleHBlbnNlcyB0aGF0IHdlIHJlcXVpcmUuIEtpbmRseSByZXZpZXcgYW5kIHByb3ZpZGUgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QXVkaXRpb24gRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGJhbmsvY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBzaG93aW5nIHBheW1lbnRzIGZvciBhdWRpdGlvbnMsIGluY2x1ZGluZyBhbnkgYXBwbGljYXRpb24gb3IgZW50cnkgZmVlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRyYXZlbCBFeHBlbnNlczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBmb3IgdHJhdmVsIGNvc3RzIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2VzLiBUaGlzIGluY2x1ZGVzIGFpcmZhcmUsIGxvZGdpbmcsIGNhciByZW50YWxzLCBhbmQgZ2Fzb2xpbmUgcmVjZWlwdHMuIFBsZWFzZSBpbmRpY2F0ZSB0aGUgZGF0ZXMgYW5kIHB1cnBvc2Ugb2YgZWFjaCB0cmlwLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHVtZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgZm9yIGFueSBjb3N0dW1lcyBvciBzcGVjaWFsaXplZCBjbG90aGluZyByZXF1aXJlZCBmb3IgeW91ciBwZXJmb3JtYW5jZXMgdGhhdCBhcmUgbm90IHN1aXRhYmxlIGZvciBldmVyeWRheSB3ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWFrZXVwL0hhaXIgRXhwZW5zZXM6PC9zdHJvbmc+IFNwZWNpZmljIHRvIHBlcmZvcm1hbmNlcywgaW5jbHVkaW5nIGNvc3RzIGZvciBwcm9kdWN0cyBhbmQgcHJvZmVzc2lvbmFsIHNlcnZpY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhaW5pbmcgYW5kIFByb2Zlc3Npb25hbCBEZXZlbG9wbWVudDo8L3N0cm9uZz4gQ29zdHMgcmVsYXRlZCB0byBjbGFzc2VzLCB3b3Jrc2hvcHMsIG9yIHNlbWluYXJzIGFpbWVkIGF0IGltcHJvdmluZyB5b3VyIHBlcmZvcm1hbmNlIHNraWxscy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFnZW50IGFuZCBNYW5hZ2VtZW50IEZlZXM6PC9zdHJvbmc+IENvbnRyYWN0cyBvciBzdGF0ZW1lbnRzIGRldGFpbGluZyBwYXltZW50cyB0byBhZ2VudHMgb3IgbWFuYWdlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NaXNjZWxsYW5lb3VzIFBlcmZvcm1hbmNlLVJlbGF0ZWQgRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIGZvciBhbnkgb3RoZXIgZXhwZW5zZXMgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHdvcmsgYXMgYSBwZXJmb3JtaW5nIGFydGlzdCwgc3VjaCBhcyBlcXVpcG1lbnQsIG11c2ljIG9yIHNjcmlwdCBwdXJjaGFzZXMsIGFuZCBtYWludGVuYW5jZSBjb3N0cyBmb3IgaW5zdHJ1bWVudHMgb3IgcGVyZm9ybWFuY2UgZ2Vhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGNsZWFybHkgaW5kaWNhdGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UuIElmIHlvdSdyZSB1bnN1cmUgd2hldGhlciBhbiBleHBlbnNlIHF1YWxpZmllcywgaW5jbHVkZSBpdCB3aXRoIGEgYnJpZWYgbm90ZSBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRmVlIEJhc2VkIEdvdmVybm1lbnQgT2ZmaWNpYWwgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zIGFuZCBub3RlZCB0aGF0IHlvdSB3b3JrZWQgYXMgYSA8c3Ryb25nPmZlZS1iYXNlZCBnb3Zlcm5tZW50IG9mZmljaWFsPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIEFzIHBhcnQgb2YgdGhpcyByb2xlLCB5b3UndmUgcmVwb3J0ZWQgaW5jdXJyaW5nIHVucmVpbWJ1cnNlZCBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgb2ZmaWNpYWwgZHV0aWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltdW0gZGVkdWN0aW9ucyBvbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIEV4cGVuc2UgUmVwb3J0czo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIGV4cGVuc2VzLiBFYWNoIGVudHJ5IHNob3VsZCBpbmNsdWRlIHRoZSBkYXRlLCBhbW91bnQsIGFuZCBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBuYXR1cmUgb2YgdGhlIGV4cGVuc2UuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9mIHRoZSByZXBvcnRlZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBTY2hlZHVsZSBvciBEdXR5IFJvc3Rlcjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGNvcnJlbGF0ZXMgeW91ciByZXBvcnRlZCBleHBlbnNlcyB3aXRoIHlvdXIgb2ZmaWNpYWwgZHV0aWVzIG9uIHNwZWNpZmljIGRhdGVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk1pbGVhZ2UgTG9nOjwvc3Ryb25nPiBJZiBhbnkgZXhwZW5zZXMgYXJlIGZvciB0cmF2ZWwsIGEgZGV0YWlsZWQgbWlsZWFnZSBsb2cgc2hvd2luZyBkYXRlcywgZGVzdGluYXRpb24sIHB1cnBvc2Ugb2YgdGhlIHRyaXAsIGFuZCBtaWxlcyB0cmF2ZWxlZC4gRW5zdXJlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBwZXJzb25hbCBhbmQgb2ZmaWNpYWwgdHJhdmVsLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gd2l0aCBHb3Zlcm5tZW50IEFnZW5jeTo8L3N0cm9uZz4gQW55IGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGdvdmVybm1lbnQgYWdlbmN5IGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBleHBlbnNlcyB3ZXJlIG5vdCByZWltYnVyc2VkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGlzIGxlZ2libGUgYW5kIG9yZ2FuaXplZCBjaHJvbm9sb2dpY2FsbHkuIFRoaXMgd2lsbCBncmVhdGx5IGFzc2lzdCBpbiB0aGUgc3BlZWR5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggZmlsaW5ncyBhbmQgaW4gbWF4aW1pemluZyB5b3VyIGVsaWdpYmxlIGRlZHVjdGlvbnMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2XigJlyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5ITwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgeW91ciBIZWFsdGggU2F2aW5ncyBBY2NvdW50IChIU0EpIGNvbnRyaWJ1dGlvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBIU0EgZGVkdWN0aW9uIGFuZCBlbnN1cmUgd2UgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgSFNBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+QW55IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSB5b3VyIGVtcGxveWVyIHRvIHRoZSBIU0EgKGlmIGFwcGxpY2FibGUpLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMsIGlmIHRoZXkgd2VyZSBub3QgbWFkZSBpbiBhIGx1bXAgc3VtLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIEhTQSBlbGlnaWJpbGl0eSBmb3IgdGhlIHRheCB5ZWFyICh0eXBpY2FsbHksIHRoaXMgaW52b2x2ZXMgcHJvb2Ygb2YgYSBIaWdoIERlZHVjdGlibGUgSGVhbHRoIFBsYW4pLjwvbGk+XHJcbiAgICAgICAgPGxpPlN0YXRlbWVudHMgZnJvbSB5b3VyIEhTQSBwcm92aWRlciBkZXRhaWxpbmcgZGlzdHJpYnV0aW9ucywgaWYgYW55IHdlcmUgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgbWVkaWNhbCBleHBlbnNlcyBwYWlkIG91dCBvZiB0aGUgSFNBLCBpZiBhbnkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGJvdGggdGhlIGFjY3VyYXRlIGZpbGluZyBvZiB5b3VyIHRheGVzIGFuZCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyByZWdhcmRpbmcgSFNBcy4gUGxlYXNlIHJlc3BvbmQgd2l0aCB0aGVzZSBkb2N1bWVudHMgYW5kIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGZvciB0aGUgY3VycmVudCB0YXggeWVhciwgeW91IGluZGljYXRlZCB0aGF0IHlvdSBoYXZlIGluY3VycmVkIG1vdmluZyBleHBlbnNlcyByZWxhdGVkIHRvIGEgcGVybWFuZW50IGNoYW5nZSBvZiBzdGF0aW9uIGFzIGEgbWVtYmVyIG9mIHRoZSBBcm1lZCBGb3JjZXMuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggcmV0dXJuIGFuZCB0byBwb3RlbnRpYWxseSBxdWFsaWZ5IGZvciByZWxhdGVkIGRlZHVjdGlvbnMgb3IgZXhjbHVzaW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PGI+T3JkZXJzIGZvciBQZXJtYW5lbnQgQ2hhbmdlIG9mIFN0YXRpb246PC9iPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIG9yZGVycyB0aGF0IGluaXRpYXRlZCB0aGUgbW92ZS4gVGhpcyBzaG91bGQgZGV0YWlsIHRoZSBtb3ZlIGlzIGR1ZSB0byBtaWxpdGFyeSBvcmRlcnMgYW5kIGluZGljYXRlIGJvdGggeW91ciBwcmV2aW91cyBhbmQgbmV3IGR1dHkgc3RhdGlvbnMuPC9saT5cclxuICAgICAgPGxpPjxiPlJlY2VpcHRzIGFuZCBSZWNvcmRzIG9mIE1vdmluZyBFeHBlbnNlczo8L2I+IERldGFpbGVkIHJlY2VpcHRzIG9yIHJlY29yZHMgb2YgYWxsIG1vdmluZy1yZWxhdGVkIGV4cGVuc2VzLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG86XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlRyYW5zcG9ydGF0aW9uIGNvc3RzIChlLmcuLCBjb3N0cyBhc3NvY2lhdGVkIHdpdGggbW92aW5nIGhvdXNlaG9sZCBnb29kcyBhbmQgcGVyc29uYWwgZWZmZWN0cyk8L2xpPlxyXG4gICAgICAgICAgPGxpPlRyYXZlbCBleHBlbnNlcyB0byB0aGUgbmV3IGhvbWUgKGUuZy4sIGxvZGdpbmcgY29zdHMgZW4gcm91dGUsIGJ1dCBub3QgbWVhbHMpPC9saT5cclxuICAgICAgICAgIDxsaT5TdG9yYWdlIGV4cGVuc2VzIGZvciBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMsIGlmIGFwcGxpY2FibGU8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48Yj5MZWFzZSBUZXJtaW5hdGlvbiBEb2N1bWVudGF0aW9uOjwvYj4gSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggYnJlYWtpbmcgYSBsZWFzZSBkdWUgdG8gdGhlIG1vdmUuPC9saT5cclxuICAgICAgPGxpPjxiPlByb29mIG9mIE5ldyBSZXNpZGVuY2U6PC9iPiBBIGRvY3VtZW50IGluZGljYXRpbmcgdGhlIGFkZHJlc3Mgb2YgeW91ciBuZXcgcGVybWFuZW50IHJlc2lkZW5jZS4gVGhpcyBjYW4gaW5jbHVkZSBhIHV0aWxpdHkgYmlsbCwgbmV3IGxlYXNlIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGRvY3VtZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBub3RlLCB0byB0YWtlIGFkdmFudGFnZSBvZiBhbnkgZXhjbHVzaW9ucyBvciBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gQXJtZWQgRm9yY2VzIG1vdmluZyBleHBlbnNlcywgdGhlc2UgZG9jdW1lbnRzIGFyZSBuZWNlc3NhcnkgdG8gdmVyaWZ5IHRoZSBleHBlbnNlcyBpbmN1cnJlZC4gV2UgdW5kZXJzdGFuZCB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGVzZSBkb2N1bWVudHMgYW5kIGFzc3VyZSB5b3UgdGhhdCBhbGwgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2lsbCBiZSBrZXB0IGNvbmZpZGVudGlhbCBhbmQgdXNlZCBleGNsdXNpdmVseSBmb3IgdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSBpbiBwcm92aWRpbmcgdGhlc2UgZG9jdW1lbnRzIHRvIHVzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVkdWN0aWJsZSBTZWxmIEVtcGxveW1lbnQgUGFydCBUYXhlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGVkdWN0aWJsZSBTZWxmIEVtcGxveW1lbnQgUGFydCBUYXhlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGFkanVzdG1lbnQgZm9yIGhhbGYgb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4LiBUaGlzIGludm9sdmVzIHRoZSBkZWR1Y3Rpb24gb2YgaGFsZiBvZiB0aGUgc2VsZi1lbXBsb3ltZW50IHRheCB5b3UndmUgcGFpZCBmb3IgdGhlIGN1cnJlbnQgeWVhciwgd2hpY2ggY29udHJpYnV0ZXMgdG93YXJkcyB5b3VyIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHRoaXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+U2VsZi1FbXBsb3ltZW50IFRheCBDYWxjdWxhdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBjYWxjdWxhdGlvbiBvZiB5b3VyIHNlbGYtZW1wbG95bWVudCB0YXggZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGEgc3VtbWFyeSBvZiB5b3VyIG5ldCBlYXJuaW5ncyBmcm9tIHNlbGYtZW1wbG95bWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VG90YWwgU2VsZi1FbXBsb3ltZW50IFRheCBQYWlkOjwvc3Ryb25nPiBPZmZpY2lhbCByZWNlaXB0cyBvciBkb2N1bWVudHMgc2hvd2luZyB0aGUgdG90YWwgYW1vdW50IG9mIHNlbGYtZW1wbG95bWVudCB0YXggcGFpZCBmb3IgdGhlIHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPklkZW50aWZpY2F0aW9uIG9mIFBheW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9yIGxlZGdlcnMgaW5kaWNhdGluZyBwYXltZW50cyBtYWRlIHRvd2FyZHMgU29jaWFsIFNlY3VyaXR5IGFuZCBNZWRpY2FyZSB0aHJvdWdoIHNlbGYtZW1wbG95bWVudCB0YXguPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXhlcyBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIGVudGl0bGVkIGRlZHVjdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFNFUC1JUkEgKFNpbXBsaWZpZWQgRW1wbG95ZWUgUGVuc2lvbiBJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkgdGhpcyB0YXggeWVhciBhcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbC4gRm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNFUC1JUkEgQ29udHJpYnV0aW9uIFN0YXRlbWVudHM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBzdGF0ZW1lbnRzIG9yIHJlY2VpcHRzIHNob3dpbmcgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZSB0byB5b3VyIFNFUC1JUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFNlbGYtRW1wbG95ZWQgSW5jb21lOjwvc3Ryb25nPiBBcyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9uIGxpbWl0cyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHNlbGYtZW1wbG95ZWQgaW5jb21lLCBwbGVhc2UgZW5zdXJlIHdlIGhhdmUgYWxsIHJlbGV2YW50IGluY29tZSBkb2N1bWVudGF0aW9uLiBUaGlzIG1heSBpbmNsdWRlLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIDEwOTkgZm9ybXMsIHByb2ZpdCBhbmQgbG9zcyBzdGF0ZW1lbnRzLCBhbmQgYnVzaW5lc3MgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U2NoZWR1bGUgQyAoRm9ybSAxMDQwKSBvciBFcXVpdmFsZW50Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBkb25lIHNvLCBwbGVhc2UgcHJvdmlkZSBhIGNvbXBsZXRlZCBTY2hlZHVsZSBDIG9yIGVxdWl2YWxlbnQgZG9jdW1lbnRhdGlvbiB0aGF0IGRldGFpbHMgeW91ciBidXNpbmVzcyBlYXJuaW5ncyBhbmQgZXhwZW5zZXMuIFRoaXMgd2lsbCBoZWxwIGluIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgeW91ciBtYXhpbXVtIGRlZHVjdGlibGUgY29udHJpYnV0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFByaW9yIFllYXIgQ29udHJpYnV0aW9uIERldGFpbHM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIG1hZGUgY29udHJpYnV0aW9ucyBpbiBwcmlvciB5ZWFycyBidXQgaGF2ZW7igJl0IHNoYXJlZCB0aG9zZSBkZXRhaWxzIHdpdGggdXMsIHBsZWFzZSBkbyBzby4gVGhpcyBjYW4gYWZmZWN0IHlvdXIgY3VycmVudCB5ZWFy4oCZcyBjb250cmlidXRpb25zIGFuZCBkZWR1Y3Rpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+Q29ycmVjdGx5IHJlcG9ydGluZyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9ucyBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyB0aGF0IHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSB0YXggZGVkdWN0aW9ucyBhbmQgY29tcGx5IHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseSBhbmQgYWNjdXJhdGVseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBTSU1QTEUgUGxhbiBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGAgICAgPHA+V2UncmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgY29udHJpYnV0ZWQgdG8gYSBTSU1QTEUgSVJBIHBsYW4gYXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZXNlIGNvbnRyaWJ1dGlvbnMgaW4geW91ciB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgU0lNUExFIElSQSB0aGlzIHRheCB5ZWFyOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB0aGUgdG90YWwgc3VtIG9mIHlvdXIgY29udHJpYnV0aW9ucy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBkYXRlczo8L3N0cm9uZz4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggeW91IG1hZGUgdGhlc2UgY29udHJpYnV0aW9ucyB0byB0aGUgU0lNUExFIElSQS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIGNvbnRyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIG9yIHRyYW5zYWN0aW9uIGhpc3RvcmllcyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIHRvIHlvdXIgU0lNUExFIElSQSBhY2NvdW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SVJTIEZvcm0gMTA0MCBTY2hlZHVsZSBDOjwvc3Ryb25nPiBBcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbCwgeW91ciB0YXggcmV0dXJuIHNob3VsZCBpbmNsdWRlIGEgU2NoZWR1bGUgQyBzaG93aW5nIHlvdXIgYnVzaW5lc3MgaW5jb21lIGFuZCBleHBlbnNlcy4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGRldGVybWluaW5nIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCB0aGUgY29udHJpYnV0aW9uIGxpbWl0cyBmb3IgeW91ciBTSU1QTEUgSVJBLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChFSU4pIG9mIHRoZSBTSU1QTEUgSVJBIHBsYW46PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgdGhlIEVJTiBmb3IgeW91ciBTSU1QTEUgSVJBLiBUaGlzIGlzIG5vdCByZXF1aXJlZCBpZiB5b3UgYXJlIHRoZSBzb2xlIGNvbnRyaWJ1dG9yIGFuZCBkbyBub3QgaGF2ZSBhbiBFSU4gc2VwYXJhdGUgZnJvbSB5b3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciByZXRpcmVtZW50IGNvbnRyaWJ1dGlvbnMuIFlvdXIgcHJvbXB0bmVzcyBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGhlbHAgYXZvaWQgZGVsYXlzIGluIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBRdWFsaWZpZWQgUGxhbiBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIG5lZWQgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIHNlbGYtZW1wbG95ZWQgcXVhbGlmaWVkIHBsYW4gY29udHJpYnV0aW9ucy4gWW91ciByZXNwb25zZSB0byBvdXIgcXVlc3Rpb24gYWJvdXQgbWFraW5nIGNvbnRyaWJ1dGlvbnMgdG8gYSBxdWFsaWZpZWQgcmV0aXJlbWVudCBwbGFuIGR1cmluZyB0aGlzIHRheCB5ZWFyIG5lY2Vzc2l0YXRlcyBmdXJ0aGVyIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgY29tcHV0ZSBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzIG9yIG9ibGlnYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PGI+Q29uZmlybWF0aW9uIG9mIENvbnRyaWJ1dGlvbiBUeXBlOjwvYj4gQ2xhcmlmeSB0aGUgdHlwZSBvZiBxdWFsaWZpZWQgcmV0aXJlbWVudCBwbGFuIHlvdSBjb250cmlidXRlZCB0byAoZS5nLiwgU29sbyA0MDEoayksIFNFUCBJUkEsIFNJTVBMRSBJUkEpLjwvbGk+XHJcbiAgICA8bGk+PGI+VG90YWwgQW1vdW50IENvbnRyaWJ1dGVkOjwvYj4gU3BlY2lmeSB0aGUgdG90YWwgZG9sbGFyIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgcGxhbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PGI+Q29udHJpYnV0aW9uIERhdGVzOjwvYj4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cclxuICAgIDxsaT48Yj5QbGFuIEFkbWluaXN0cmF0b3I6PC9iPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBwbGFuJ3MgYWRtaW5pc3RyYXRvciwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPGxpPjxiPlByb29mIG9mIENvbnRyaWJ1dGlvbnM6PC9iPiBGb3J3YXJkIGFueSByZWNlaXB0cywgc3RhdGVtZW50cywgb3Igb3RoZXIgZG9jdW1lbnRzIHRoYXQgY2FuIHZlcmlmeSB0aGUgY29udHJpYnV0aW9ucyB5b3UgbWFkZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgcHJvcGVyIHRheCB0cmVhdG1lbnQgZm9yIHRoZXNlIGNvbnRyaWJ1dGlvbnMuIEZhaWx1cmUgdG8gYWNjdXJhdGVseSByZXBvcnQgcmV0aXJlbWVudCBwbGFuIGNvbnRyaWJ1dGlvbnMgY2FuIHJlc3VsdCBpbiBkaXNjcmVwYW5jaWVzIHdpdGggdGhlIElSUyBhbmQgcG90ZW50aWFsbHkgYWZmZWN0IHlvdXIgdGF4IGxpYWJpbGl0eSBvciByZWZ1bmQuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCB1cyB0byBtb3JlIGVmZmljaWVudGx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uIHNlcnZpY2VzLiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91IGluZGljYXRlZCBwYXlpbmcgZm9yIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXMgYXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9ucyBmb3IgeW91ciBoZWFsdGggaW5zdXJhbmNlIGNvc3RzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIDxzdHJvbmc+YWxsIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXM8L3N0cm9uZz4gcGFpZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgbWVkaWNhbCwgZGVudGFsLCBhbmQgbG9uZy10ZXJtIGNhcmUgaW5zdXJhbmNlLiBUaGlzIHNob3VsZCBjb3ZlcjpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91cnNlbGY8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBzcG91c2U8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBkZXBlbmRlbnRzPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBwYXltZW50IGZvciB0aGVzZSBwcmVtaXVtcywgc3VjaCBhczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50czwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBheW1lbnQgcmVjZWlwdHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNhbmNlbGxlZCBjaGVja3M8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgaW5zdXJhbmNlIGNvdmVyYWdlLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5JbnN1cmFuY2UgcG9saWN5IHN0YXRlbWVudHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvdmVyYWdlIHN1bW1hcmllczwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhlIGluc3VyYW5jZSBwbGFuIGlzIGVzdGFibGlzaGVkIHVuZGVyIHlvdXIgYnVzaW5lc3MgKGZvciBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWxzKS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgeW91ciBkZWR1Y3RpYmxlIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMgYW5kIHJlZ3VsYXRpb25zLiBQbGVhc2Ugc2VuZCB0aGUgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZWQgaW4gYSB0aW1lbHkgbWFubmVyLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybHkgU2F2aW5ncyBXaXRoZHJhd2FsIFBlbmFsdHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVhcmx5IFNhdmluZ3MgV2l0aGRyYXdhbCBQZW5hbHR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBpbmN1cnJlZCBwZW5hbHRpZXMgZHVlIHRvIGVhcmx5IHdpdGhkcmF3YWxzIGZyb20gc2F2aW5ncyBhY2NvdW50cyBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYXNzaXN0IHlvdSBlZmZpY2llbnRseSBhbmQgZW5zdXJlIGFjY3VyYXRlIHRheCBmaWxpbmcsIHdlIGtpbmRseSBhc2sgeW91IHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGhlIHRvdGFsIGFtb3VudCBvZiBwZW5hbHRpZXM8L3N0cm9uZz4gaW5jdXJyZWQgZnJvbSBlYXJseSB3aXRoZHJhd2Fscy4gVGhpcyBpbmNsdWRlcyBwZW5hbHRpZXMgZnJvbSBjZXJ0aWZpY2F0ZXMgb2YgZGVwb3NpdCBvciBvdGhlciB0aW1lLWJhc2VkIHNhdmluZ3MgYWNjb3VudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBzdGF0ZW1lbnRzPC9zdHJvbmc+IGZyb20geW91ciBmaW5hbmNpYWwgaW5zdGl0dXRpb24gZm9yIGVhY2ggaW5zdGFuY2Ugb2YgZWFybHkgd2l0aGRyYXdhbC4gVGhlc2Ugc3RhdGVtZW50cyBzaG91bGQgaW5jbHVkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBkYXRlIG9mIHdpdGhkcmF3YWw8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgd2l0aGRyYXduIGVhcmx5PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgcGVuYWx0eSBjaGFyZ2VkPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSBwdXJwb3NlIG9mIGVhY2ggd2l0aGRyYXdhbDwvc3Ryb25nPiwgaWYgYXZhaWxhYmxlLiBDZXJ0YWluIHNpdHVhdGlvbnMgbWF5IHByb3ZpZGUgZXhjZXB0aW9ucyB0byBwZW5hbHRpZXMgb24geW91ciB0YXggcmV0dXJuLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSA8c3Ryb25nPmNvcnJlc3BvbmRlbmNlIG9yIGRvY3VtZW50YXRpb248L3N0cm9uZz4gZnJvbSB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uIHJlZ2FyZGluZyB0aGVzZSBwZW5hbHRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gYWNjdXJhdGVseSBhc3Nlc3MgcG9zc2libGUgaW1wYWN0cyBvbiB5b3VyIHRheCBmaWxpbmcgYW5kIGV4cGxvcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBbGltb255IFBhaWRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFsaW1vbnkgUGFpZFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBwcm92aWRpbmcgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZmluYW5jaWFsIGFjdGl2aXRpZXMgb3ZlciB0aGUgcGFzdCB0YXggeWVhci4gQXMgeW91IGluZGljYXRlZCB0aGF0IHlvdSBoYXZlIG1hZGUgYWxpbW9ueSBwYXltZW50cyB1bmRlciBhIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybi4gVGhlIGRvY3VtZW50YXRpb24gaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeWluZyBhbGxvd2FibGUgZGVkdWN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIHBheW1lbnRzLjwvcD4gXHJcbiAgICA8cD48c3Ryb25nPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyByZWxhdGVkIHRvIHlvdXIgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBzaWduZWQgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudCB0aGF0IHN0YXRlcyB0aGUgYW1vdW50IG9mIGFsaW1vbnkgdG8gYmUgcGFpZCBhbmQgdGhlIHRpbWVsaW5lcy4gUGxlYXNlIGVuc3VyZSB0aGlzIGRvY3VtZW50IGhpZ2hsaWdodHMgdGhlIHNlY3Rpb25zIHJlbGV2YW50IHRvIGFsaW1vbnkgb2JsaWdhdGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkIG9mIGFsbCBhbGltb255IHBheW1lbnRzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGF0ZSBvZiBlYWNoIHBheW1lbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCBvZiBlYWNoIHBheW1lbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1ldGhvZCBvZiBwYXltZW50IChlLmcuLCBjaGVjaywgYmFuayB0cmFuc2Zlcik8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIHJlY2lwaWVudDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgYXMgcHJvb2Ygb2YgdGhlIGFsaW1vbnkgcGF5bWVudHMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCBhbnkgZG9jdW1lbnRhdGlvbiBvciBjb3JyZXNwb25kZW5jZSB0aGF0IGluZGljYXRlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBvcmlnaW5hbCBhZ3JlZW1lbnQgYWZmZWN0aW5nIGFsaW1vbnkgcGF5bWVudHMgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgZG9jdW1lbnRhdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoYXQgeW91ciB0YXggcmV0dXJuIHJlZmxlY3RzIGFsbCByZWxldmFudCBmaW5hbmNpYWwgYWN0aXZpdGllcyBhbmQgYXNzaXN0cyBpbiBhY2N1cmF0ZWx5IGRldGVybWluaW5nIGFueSB0YXggbGlhYmlsaXRpZXMgb3IgZGVkdWN0aW9ucy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGVzZSBkZXRhaWxzIHdpbGwgYmUgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgd2lsbCBleHBlZGl0ZSB0aGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgaWYgeW91IG5lZWQgZnVydGhlciBndWlkYW5jZSBvbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLiBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgVHJhZGl0aW9uYWwgSVJBIChJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkuIFRvIGFjY3VyYXRlbHkgY2FwdHVyZSB0aGlzIGluIHlvdXIgdGF4IGZpbGluZyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHdlIHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5Qcm9vZiBvZiBjb250cmlidXRpb24gdG8gdGhlIFRyYWRpdGlvbmFsIElSQSAoc3VjaCBhcyBzdGF0ZW1lbnRzIG9yIHJlY2VpcHRzKS48L2xpPlxyXG4gICAgICA8bGk+WW91ciB5ZWFyLWVuZCBJUkEgc3RhdGVtZW50LjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBwcmV2aW91cyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zIHRvIHlvdXIgSVJBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IHdpdGhkcmF3YWxzIG9yIGRpc3RyaWJ1dGlvbnMgdGFrZW4gZHVyaW5nIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgYW5kIGFueSBpbmZvcm1hdGlvbiBvbiBhIHNwb3VzZSdzIElSQSBjb250cmlidXRpb25zIGlmIHlvdSBhcmUgbWFycmllZC48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlscyBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgdGhhdCB3ZSBjYW4gYWNjdXJhdGVseSByZXByZXNlbnQgeW91ciBJUkEgY29udHJpYnV0aW9ucyBhbmQgb3B0aW1pemUgeW91ciBkZWR1Y3Rpb25zLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgdGhlIHBheW1lbnQgb2Ygc3R1ZGVudCBsb2FuIGludGVyZXN0IGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHByb2Nlc3MgdGhpcyBzZWdtZW50IG9mIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIHlvdSBiZW5lZml0IGZyb20gYW55IHBvdGVudGlhbCBTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uLCB3ZSBuZWVkIHlvdSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OC1FOjwvc3Ryb25nPiBUaGlzIGlzIGEgU3R1ZGVudCBMb2FuIEludGVyZXN0IFN0YXRlbWVudCBpc3N1ZWQgYnkgeW91ciBsb2FuIHNlcnZpY2VyLiBJZiB5b3UndmUgcGFpZCAkNjAwIG9yIG1vcmUgaW4gaW50ZXJlc3QsIHlvdSBzaG91bGQgYXV0b21hdGljYWxseSByZWNlaXZlIGl0LiBQbGVhc2Ugc2NhbiBhbmQgc2VuZCBpdCB0byB1cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxvYW4gU3RhdGVtZW50czo8L3N0cm9uZz4gSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIEZvcm0gMTA5OC1FIG9yIHBhaWQgbGVzcyB0aGFuICQ2MDAgaW4gaW50ZXJlc3QsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIGxvYW4gc3RhdGVtZW50cyBpbmRpY2F0aW5nIHRoZSBpbnRlcmVzdCBwYWlkIG92ZXIgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Qm9ycm93ZXIncyBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB0aGUgU29jaWFsIFNlY3VyaXR5IE51bWJlcnMgYW5kIGZ1bGwgbmFtZXMgb2YgYW55IGluZGl2aWR1YWxzIGZvciB3aG9tIHRoZSBsb2FuIGludGVyZXN0IHdhcyBwYWlkLCBpbmNsdWRpbmcgeW91cnNlbGYsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudHMgb24gU29tZW9uZSBFbHNlJ3MgQmVoYWxmOjwvc3Ryb25nPiBJZiB5b3UncmUgbm90IGxlZ2FsbHkgb2JsaWdhdGVkIHRvIG1ha2UgaW50ZXJlc3QgcGF5bWVudHMgb24gdGhlIGxvYW4gYnV0IGhhdmUgZG9uZSBzbyBhbnl3YXksIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyByZWZsZWN0aW5nIHRoaXMgcGF5bWVudC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgZGVkdWN0aW9uIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBhZHZhbnRhZ2VzLCBhbmQgd2UncmUgaGVyZSB0byBoZWxwIHlvdSBtYXhpbWl6ZSB5b3VyIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb2FjdGl2ZSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBzZXJ2ZSB5b3UgYmV0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcmNoZXIgTVNBIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJjaGVyIE1TQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGVkIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBjb250cmlidXRpb25zIHRvIGFuIEFyY2hlciBNZWRpY2FsIFNhdmluZ3MgQWNjb3VudCAoTVNBKSB3aXRoaW4gdGhpcyB0YXggeWVhciwgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgY29udHJpYnV0aW9ucyBpbiB5b3VyIHRheCByZXR1cm4sIGFuZCB0byBtYXhpbWl6ZSB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIHNwZWNpZmljczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA1NDk4LVNBOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgRm9ybSA1NDk4LVNBLCBpZiByZWNlaXZlZCwgd2hpY2ggc2hvd3MgdGhlIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgQXJjaGVyIE1TQSB0aGlzIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBvciBGaW5hbmNpYWwgU3RhdGVtZW50czo8L3N0cm9uZz4gSWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgRm9ybSA1NDk4LVNBLCBiYW5rIG9yIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiBzdGF0ZW1lbnRzIHNob3dpbmcgeW91ciBjb250cmlidXRpb25zIHRvIHRoZSBNU0EgYXJlIHJlcXVpcmVkLiBFbnN1cmUgdGhlc2UgY2xlYXJseSBoaWdobGlnaHQgdGhlIGNvbnRyaWJ1dGlvbiBhbW91bnRzIGFuZCBkYXRlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEhpZ2gtRGVkdWN0aWJsZSBIZWFsdGggUGxhbjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB5b3UgYXJlIGNvdmVyZWQgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRoaXMgY291bGQgaW5jbHVkZSBpbnN1cmFuY2Ugc3RhdGVtZW50cyBvciBwb2xpY3kgZG9jdW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgYW5kIEFjY291bnQgSW5mb3JtYXRpb246PC9zdHJvbmc+IENvbmZpcm0gdGhlIGFjY291bnQgaG9sZGVyJ3MgZnVsbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyLCBhbG9uZ3NpZGUgdGhlIEFyY2hlciBNU0EgYWNjb3VudCBudW1iZXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIGRlZHVjdGlvbiBwcm9jZXNzIGFuZCBhZGhlcmUgdG8gSVJTIGd1aWRlbGluZXMsIGtpbmRseSBzdWJtaXQgdGhlIG91dGxpbmVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlPC9zdHJvbmc+LiBFYXJseSBzdWJtaXNzaW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlLjwvcD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoZXNlIHJlcXVpcmVtZW50cyB3aWxsIGRpcmVjdGx5IGltcGFjdCB0aGUgZWZmaWNpZW5jeSBhbmQgYWNjdXJhY3kgb2YgeW91ciB0YXggcmV0dXJuIHByb2Nlc3NpbmcuIFNob3VsZCB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgZG9jdW1lbnRhdGlvbiwgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIFdyaXRlLUluIEFkanVzdG1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZXhwZW5zZXMgb3IgYWRqdXN0bWVudHMgdGhhdCBjb3VsZCBpbXBhY3QgeW91ciB0YXhhYmxlIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBmdWxseSBsZXZlcmFnZSBhbGwgcG9zc2libGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGVzZSBpdGVtcy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggc3BlY2lmaWVkIGRlZHVjdGlvbiBvciBhZGp1c3RtZW50OjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgRXhwZW5zZSBvciBBZGp1c3RtZW50Ojwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggaXRlbSB5b3UgYmVsaWV2ZSBzaG91bGQgYmUgY29uc2lkZXJlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudDo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBwYWlkIG9yIGluY3VycmVkIGZvciBlYWNoIG9mIHRoZXNlIGV4cGVuc2VzIG9yIGFkanVzdG1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQ29waWVzIG9mIHJlY2VpcHRzLCBpbnZvaWNlcywgbGVnYWwgZG9jdW1lbnRzLCBvciBvdGhlciBzdXBwb3J0aW5nIGV2aWRlbmNlIHRoYXQgdmFsaWRhdGUgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudC4gVGhpcyBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggSVJTIHJlcXVpcmVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUGF5bWVudCBvciBJbmN1cnJlbmNlOjwvc3Ryb25nPiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZCBvciB0aGUgYWRqdXN0bWVudCBvY2N1cnJlZC4gVGhpcyBpcyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIHRheCB5ZWFyIGluIHdoaWNoIHRoZSBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudCBhcHBsaWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBFeHBsYW5hdGlvbjo8L3N0cm9uZz4gQW55IG90aGVyIHJlbGV2YW50IGluZm9ybWF0aW9uIHRoYXQgY291bGQgaGVscCB1cyB1bmRlcnN0YW5kIGhvdyB0aGUgZXhwZW5zZSBvciBhZGp1c3RtZW50IGlzIGp1c3RpZmllZCB1bmRlciBJUlMgcnVsZXMgYW5kIHJlZ3VsYXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFyZSBwcm92aWRlZCBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGVmZmljaWVudCBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvbnN0aXR1dGVzIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC4gV2UgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTWVkaWNhbCBhbmQgRGVudGFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FsIGFuZCBEZW50YWwgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3Ugb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgaW5jdXJyZWQgc2lnbmlmaWNhbnQgbWVkaWNhbCBvciBkZW50YWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIgdGhhdCB3ZXJlIG5vdCByZWltYnVyc2VkIGJ5IGluc3VyYW5jZSBvciBvdGhlciBoZWFsdGggcGxhbnMuIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHJlY2VpcHRzIG9yIHN0YXRlbWVudHMgZm9yIGFsbCBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgaW5jdXJyZWQgZm9yIHlvdXJzZWxmIGFuZCBhbnkgZGVwZW5kZW50cy4gVGhpcyBpbmNsdWRlcyBwYXltZW50cyBmb3I6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N0b3JzIGFuZCBkZW50aXN0czwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+U3VyZ2VvbnM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlByZXNjcmlwdGlvbnM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1lZGljYWwgZXF1aXBtZW50IGRlZW1lZCBuZWNlc3Nhcnk8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBvdGhlciBoZWFsdGgtcmVsYXRlZCBleHBlbnNlcyBub3QgbGlzdGVkIHRoYXQgeW91IGJlbGlldmUgbWF5IGJlIHJlbGV2YW50PC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgc2hvd2luZyBhbnkgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgZnJvbSBpbnN1cmFuY2Ugb3IgaGVhbHRoIHBsYW5zIGZvciB0aGVzZSBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5BIGxpc3Qgb2YgZGVwZW5kZW50cyBmb3Igd2hvbSB0aGVzZSBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIHJlY29yZHMgb2YgdHJhdmVsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gbWVkaWNhbCBjYXJlLCBpbmNsdWRpbmcgbWlsZWFnZSwgcGFya2luZywgYW5kIHRvbGxzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SGF2aW5nIHRoZXNlIGRvY3VtZW50cyByZWFkeSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudGVkIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhhdCB3ZSBjYW4gbWF4aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIHJlbGF0ZWQgdG8gdGhlc2UgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgb3IgY29udGFjdCB1cyB0byBzY2hlZHVsZSBhIG1lZXRpbmcgdG8gZGlzY3VzcyB0aGVzZSBpbiBmdXJ0aGVyIGRldGFpbC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU0FMVCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU0FMVCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIG5lZWQgdG8gY29tcGlsZSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBTdGF0ZSBhbmQgTG9jYWwgVGF4ZXMgKFNBTFQpIGV4cGVuc2VzLiBBY2NvcmRpbmcgdG8geW91ciByZWNlbnQgc3VibWlzc2lvbiwgeW91IGluZGljYXRlZCBoYXZpbmcgcGFpZCBzaWduaWZpY2FudCBhbW91bnRzIGluIHRoZXNlIHRheGVzIG92ZXIgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBjYW4gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCBwb3NzaWJsZSBzZXJ2aWNlIGFuZCBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PGI+U3VtbWFyeSBvZiBTdGF0ZSBhbmQgTG9jYWwgSW5jb21lIFRheGVzOjwvYj4gXHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlctMiBmb3JtcyBzaG93aW5nIHN0YXRlIGFuZCBsb2NhbCBpbmNvbWUgdGF4ZXMgd2l0aGhlbGQuPC9saT5cclxuICAgICAgICAgIDxsaT5Fc3RpbWF0ZWQgdGF4IHBheW1lbnQgcmVjZWlwdHMgdG8gc3RhdGUgYW5kIGxvY2FsIGdvdmVybm1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxiPlByb3BlcnR5IFRheGVzOjwvYj5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+QW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGZvciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlLCB2YWNhdGlvbiBob21lcywgYW5kIGFueSBvdGhlciByZWFsIGVzdGF0ZSBvd25lZC48L2xpPlxyXG4gICAgICAgICAgPGxpPlZlaGljbGUgcmVnaXN0cmF0aW9uIGRvY3VtZW50cyBzaG93aW5nIHBhaWQgcHJvcGVydHkgdGF4IGFtb3VudHMuPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PGI+U2FsZXMgVGF4ZXM6PC9iPiAoSWYgeW91IGVsZWN0ZWQgdG8gZGVkdWN0IHNhbGVzIHRheGVzIGluc3RlYWQgb2YgaW5jb21lIHRheGVzKVxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvZiBzaWduaWZpY2FudCBwdXJjaGFzZXMgKGUuZy4sIHZlaGljbGUsIGJvYXQsIGhvbWUgcmVub3ZhdGlvbiBtYXRlcmlhbHMpLjwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gb3Igc3VtbWFyeSBvZiB0b3RhbCBzYWxlcyB0YXhlcyBwYWlkIGlmIHlvdSBrZXB0IGEgZGV0YWlsZWQgcmVjb3JkLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgZGF0ZWQgd2l0aGluIHRoZSBsYXN0IHRheCB5ZWFyLiBQcm92aWRpbmcgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHdpbGwgZXhwZWRpdGUgdGhlIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBoZWxwIHVzIGlkZW50aWZ5IGVsaWdpYmxlIGRlZHVjdGlvbnMgdG8gb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRlZHVjdGlibGUgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5lZWQgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGRlZHVjdGlibGUgaW50ZXJlc3QgZXhwZW5zZXMuIFRoaXMgaXMgaW4gcmVsYXRpb24gdG8gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlZCBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW9ydGdhZ2UgaW50ZXJlc3QsIGxhdGUgZmVlcywgb3IgcG9pbnRzIG9uIGEgaG9tZSBsb2FuIHRoaXMgeWVhciBmb3IgZWl0aGVyIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugb3IgYSBzZWNvbmQgaG9tZS4gVGhlc2UgZXhwZW5zZXMgbWF5IHNpZ25pZmljYW50bHkgcmVkdWNlIHlvdXIgdGF4YWJsZSBpbmNvbWUsIGVuc3VyaW5nIGEgZmF2b3JhYmxlIHRheCBvdXRjb21lIGZvciB5b3UuPC9wPlxyXG5cclxuICAgIDxoMj5SZXF1aXJlZCBEb2N1bWVudGF0aW9uPC9oMj5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIFxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+TW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50cyAoRm9ybSAxMDk4KTwvc3Ryb25nPjogRm9yIGVhY2ggcHJvcGVydHkgeW91IG93bi4gVGhpcyBpbmNsdWRlcyB5b3VyIHByaW1hcnkgaG9tZSBhbmQgYW55IHNlY29uZCBob21lcyBvciByZW50YWwgcHJvcGVydGllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SG9tZSBFcXVpdHkgTG9hbiBJbnRlcmVzdDwvc3Ryb25nPjogSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBmb3IgaW50ZXJlc3QgcGFpZCBvbiBob21lIGVxdWl0eSBsb2Fucy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBJbnRlcmVzdCBFeHBlbnNlczwvc3Ryb25nPjogSWYgeW91IGhhdmUgaW5jdXJyZWQgYW55IGludmVzdG1lbnQgaW50ZXJlc3QgZXhwZW5zZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgb3IgYWNjb3VudCBzdW1tYXJpZXMgc2hvd2luZyB0aGUgaW50ZXJlc3QgcGFpZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UG9pbnRzIFBhaWQ8L3N0cm9uZz46IERvY3VtZW50YXRpb24gZGV0YWlsaW5nIHBvaW50cyBwYWlkIGlmIHlvdSBwdXJjaGFzZWQgb3IgcmVmaW5hbmNlZCBhIGhvbWUgdGhpcyB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+TGF0ZSBQYXltZW50IEZlZXM8L3N0cm9uZz4gb24gTW9ydGdhZ2U6IElmIGFueSwgZG9jdW1lbnRhdGlvbiBvZiBsYXRlIHBheW1lbnQgZmVlcyBhc3NvY2lhdGVkIHdpdGggeW91ciBob21lIGxvYW4ocykuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UbyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgYWNjdXJhdGVseSBhbmQgZmlsZWQgb24gdGltZSwgd2Uga2luZGx5IGFzayB0aGF0IHlvdSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLiBJZiB5b3UgZm9yZXNlZSBhbnkgZGVsYXlzIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBjb250YWN0IHVzIGltbWVkaWF0ZWx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBhcHByZWNpYXRlIHRoZSBvcHBvcnR1bml0eSB0byBzZXJ2ZSB5b3UgYW5kIGFyZSBoZXJlIHRvIGFzc2lzdCB3aXRoIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMgeW91IG1heSBoYXZlLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGFyaXRhYmxlIENvbnRyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNoYXJpdGFibGUgQ29udHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgbWFkZSBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlc2UgY29udHJpYnV0aW9ucyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TGlzdCBvZiBDaGFyaXRhYmxlIE9yZ2FuaXphdGlvbnM6PC9zdHJvbmc+IE5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGhhdmUgZG9uYXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBEYXRlczo8L3N0cm9uZz4gRGF0ZXMgb24gd2hpY2ggZWFjaCBkb25hdGlvbiB3YXMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvbmF0aW9uIEFtb3VudHM6PC9zdHJvbmc+IFxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGNhc2ggZG9uYXRpb25zLCB0aGUgZXhhY3QgYW1vdW50IGRvbmF0ZWQgdG8gZWFjaCBvcmdhbml6YXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIGl0ZW1zIGRvbmF0ZWQgYXQgdGhlIHRpbWUgb2YgZG9uYXRpb24uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIERvbmF0aW9uOjwvc3Ryb25nPiBcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIGZvciBjYXNoIGRvbmF0aW9ucy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkZvciBkb25hdGlvbnMgb2YgZ29vZHMsIGFueSBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHRoZSB2YWx1YXRpb24gYW5kIGNvbmRpdGlvbiBvZiB0aGUgaXRlbXMgYXQgdGhlIHRpbWUgb2YgZG9uYXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5CYW5rIHN0YXRlbWVudHMgb3IgY2FuY2VsbGVkIGNoZWNrcyBjYW4gYWxzbyBzZXJ2ZSBhcyBwcm9vZiBmb3IgY2FzaCBkb25hdGlvbnMsIGlmIHJlY2VpcHRzIGFyZSBub3QgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDgyODM6PC9zdHJvbmc+IElmIGFueSBzaW5nbGUgZG9uYXRpb24gb2YgZ29vZHMgZXhjZWVkcyAkNTAwIGluIHZhbHVlLCBwbGVhc2UgY29tcGxldGUgU2VjdGlvbiBBIG9mIEZvcm0gODI4My4gSWYgdGhlIHRvdGFsIHZhbHVlIG9mIGdvb2RzIGRvbmF0ZWQgZXhjZWVkcyAkNSwwMDAsIGEgcXVhbGlmaWVkIGFwcHJhaXNhbCBpcyByZXF1aXJlZCBhbmQgc2hvdWxkIGJlIHByb3ZpZGVkIGFsb25nIHdpdGggU2VjdGlvbiBCIG9mIEZvcm0gODI4MyBjb21wbGV0ZWQuPC9saT5cclxuICAgIDwvb2w+XHJcblxyXG4gICAgPHA+Q29ycmVjdCBhbmQgY29tcGxldGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMuIFBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLCBhbGxvd2luZyB1cyB0byBwcm9jZXNzIHlvdXIgdGF4IGZvcm1zIGFjY3VyYXRlbHkgYW5kIHByb21wdGx5LjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRvbmF0ZWQgUHJvcGVydHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgUHJvcGVydHlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5mb3JtaW5nIHVzIGFib3V0IHlvdXIgZG9uYXRlZCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRvY3VtZW50IGFuZCBjbGFpbSB0aGVzZSBkb25hdGlvbnMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgZG9uYXRlZCBwcm9wZXJ0eSAoZS5nLiwgZnVybml0dXJlLCBjbG90aGluZywgZWxlY3Ryb25pY3MpLjwvbGk+XHJcbiAgICAgICAgPGxpPk5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGRvbmF0ZWQuPC9saT5cclxuICAgICAgICA8bGk+VGhlIGRhdGUgb2YgZWFjaCBkb25hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGF0IHRoZSB0aW1lIG9mIHRoZSBkb25hdGlvbi4gSWYgcG9zc2libGUsIGluY2x1ZGUgaG93IHlvdSBkZXRlcm1pbmVkIHRoaXMgdmFsdWUuPC9saT5cclxuICAgICAgICA8bGk+QW55IGFja25vd2xlZGdtZW50IG9yIHJlY2VpcHQgcmVjZWl2ZWQgZnJvbSB0aGUgb3JnYW5pemF0aW9uLiBQbGVhc2UgZW5zdXJlIGl0IGluY2x1ZGVzIHRoZSBvcmdhbml6YXRpb27igJlzIG5hbWUsIGRvbmF0aW9uIGRhdGUsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIGl0ZW1zLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFueSBzaW5nbGUgZG9uYXRpb24gZXhjZWVkZWQgJDUwMCBpbiB2YWx1ZSwgcGxlYXNlIHByb3ZpZGUgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgdGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBob3cgdGhlIHZhbHVlIHdhcyBkZXRlcm1pbmVkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBzbyB3ZSBjYW4gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHlvdXIgZ2VuZXJvdXMgY29udHJpYnV0aW9ucy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgZG9uYXRpb25zLCBvcmdhbml6aW5nIHRoaXMgaW5mb3JtYXRpb24gY2hyb25vbG9naWNhbGx5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFZlaGljbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydHMgaW4gc3VwcG9ydGluZyBjaGFyaXRhYmxlIGNhdXNlcyB0aHJvdWdoIHlvdXIgZ2VuZXJvdXMgdmVoaWNsZSBkb25hdGlvbi4gVG8gYWNjdXJhdGVseSBkb2N1bWVudCB0aGlzIGRvbmF0aW9uIGZvciB5b3VyIHRheCByZWNvcmRzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPkNoYXJpdHkgSW5mb3JtYXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+TmFtZSBvZiB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5DaGFyaXR5J3MgdGF4LWV4ZW1wdCBJRCBudW1iZXI8L2xpPlxyXG4gICAgICAgICAgICA8bGk+QWRkcmVzcyBhbmQgcGhvbmUgbnVtYmVyIG9mIHRoZSBjaGFyaXR5PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlZlaGljbGUgSW5mb3JtYXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+TWFrZSwgbW9kZWwsIGFuZCB5ZWFyIG9mIHRoZSBkb25hdGVkIHZlaGljbGU8L2xpPlxyXG4gICAgICAgICAgICA8bGk+VklOIChWZWhpY2xlIElkZW50aWZpY2F0aW9uIE51bWJlcik8L2xpPlxyXG4gICAgICAgICAgICA8bGk+QSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgdmVoaWNsZSdzIGNvbmRpdGlvbiBhdCB0aGUgdGltZSBvZiBkb25hdGlvbjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZG9uYXRpb24gcmVjZWlwdCBwcm92aWRlZCBieSB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5Gb3JtIDEwOTgtQyAoQ29udHJpYnV0aW9ucyBvZiBNb3RvciBWZWhpY2xlcywgQm9hdHMsIGFuZCBBaXJwbGFuZXMpIGlmIHJlY2VpdmVkPC9saT5cclxuICAgICAgICAgICAgPGxpPkFueSB3cml0dGVuIGFja25vd2xlZGdtZW50cyBvciBjb21tdW5pY2F0aW9ucyBmcm9tIHRoZSBjaGFyaXR5PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgc21vb3RoIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJucy48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IG5lZWQgYW55IGFzc2lzdGFuY2Ugb3IgaGF2ZSBxdWVzdGlvbnMgcmVnYXJkaW5nIHlvdXIgZG9uYXRpb24gcmVjb3JkcywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIEl0ZW1pemVkIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJPdGhlciBJdGVtaXplZCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhZGRpdGlvbmFsIGluZGl2aWR1YWwsIG5vbi1idXNpbmVzcyBleHBlbnNlcyB5b3UndmUgaW5jdXJyZWQgdGhpcyB0YXggeWVhciwgd2hpY2ggbWF5IHF1YWxpZnkgZm9yIGl0ZW1pemVkIGRlZHVjdGlvbnMuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgZXhwZW5zZXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGZpbmQgYmVsb3cgYSBndWlkZWxpbmUgb2YgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50cyB3ZSBhcmUgbG9va2luZyBmb3I6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBFeHBlbnNlOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhwZW5zZSwgaW5jbHVkaW5nIHRoZSBwdXJwb3NlIGFuZCB3aHkgeW91IGJlbGlldmUgaXQgcXVhbGlmaWVzIGZvciBhbiBpdGVtaXplZCBkZWR1Y3Rpb24uPC9saT5cclxuICAgICAgICA8bGk+QW1vdW50IFBhaWQ6IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBmb3IgZWFjaCBleHBlbnNlLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGVzOiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZC48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBQYXltZW50OiBSZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBvciBjcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgdGhlc2UgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+TGVnYWwgb3IgRmluYW5jaWFsIEFkdmlzb3IgU3RhdGVtZW50czogSWYgYXBwbGljYWJsZSwgc3RhdGVtZW50cyBvciBsZXR0ZXJzIGZyb20gbGVnYWwgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHN1cHBvcnRpbmcgdGhlIGRlZHVjdGliaWxpdHkgb2YgdGhlIGV4cGVuc2UuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5FeGFtcGxlcyBvZiBzdWNoIGV4cGVuc2VzIG1pZ2h0IGluY2x1ZGUgYnV0IGFyZSBub3QgbGltaXRlZCB0bzpcclxuICAgIDx1bD5cclxuICAgICAgICA8bGk+TWVkaWNhbCBleHBlbnNlcyBub3QgY292ZXJlZCBieSBoZWFsdGggaW5zdXJhbmNlPC9saT5cclxuICAgICAgICA8bGk+SW52ZXN0bWVudCBhbmQgZmluYW5jaWFsIGFkdmlzb3IgZmVlczwvbGk+XHJcbiAgICAgICAgPGxpPlRheCBwcmVwYXJhdGlvbiBmZWVzPC9saT5cclxuICAgICAgICA8bGk+U2FmZSBkZXBvc2l0IGJveCByZW50YWxzPC9saT5cclxuICAgIDwvdWw+PC9wPlxyXG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIHJlY2VpdmUgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aGUgdGltZWx5IGFuZCBlZmZpY2llbnQgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgcXVhbGlmaWVzIGFzIGFuIG90aGVyIGl0ZW1pemVkIGV4cGVuc2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hpbGQgRGVwZW5kZW50IENhcmUgQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgY29uZmlybWluZyB0aGF0IHlvdSBwYWlkIGZvciBkZXBlbmRlbnQgY2FyZSBzZXJ2aWNlcyBsYXN0IHllYXIgdG8gZW5hYmxlIHlvdSB0byB3b3JrIG9yIHNlYXJjaCBmb3IgZW1wbG95bWVudC4gVG8gYWNjdXJhdGVseSBjbGFpbSB0aGUgPHN0cm9uZz5DaGlsZCBhbmQgRGVwZW5kZW50IENhcmUgQ3JlZGl0PC9zdHJvbmc+IG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgZnVsbCBuYW1lKHMpIGFuZCBzb2NpYWwgc2VjdXJpdHkgbnVtYmVyKHMpIChTU04pIG9mIHRoZSBkZXBlbmRlbnQocykgY2FyZWQgZm9yLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgcGFpZCBmb3IgZWFjaCBkZXBlbmRlbnTigJlzIGNhcmUgc2VydmljZXMuPC9saT5cclxuICAgICAgICA8bGk+TmFtZSwgYWRkcmVzcywgYW5kIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOIG9yIFNTTikgb2YgdGhlIGNhcmUgcHJvdmlkZXIocykuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudChzKSBtYWRlIHRvIHRoZSBjYXJlZ2l2ZXIocyksIHN1Y2ggYXMgcmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIHRoZSBkZXBlbmRlbnQgaXMgYSBkaXNhYmxlZCBhZHVsdCwgcGxlYXNlIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGVpciBjb25kaXRpb24gdG8gY29uZmlybSBlbGlnaWJpbGl0eS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgYXBwbGljYWJsZSBkYXRlcyBkdXJpbmcgd2hpY2ggdGhlIGNhcmUgd2FzIHByb3ZpZGVkLCBlc3BlY2lhbGx5IGlmIHRoZSBjYXJlIHdhcyBub3QgZm9yIHRoZSBmdWxsIHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gZW5zdXJlIHdlIGNhbiBtYXhpbWl6ZSB5b3VyIGVsaWdpYmxlIGNyZWRpdCBhbmQgY29tcGx5IHdpdGggdGhlIElSUyByZXF1aXJlbWVudHMuIFNob3VsZCB5b3UgaGF2ZSBjb25jZXJucyBhYm91dCBnYXRoZXJpbmcgYW55IG9mIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRhdGlvbiwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBmb3IgYXNzaXN0YW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIHRvIGFjaGlldmUgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBvbiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNoaWxkIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBleGFtaW5pbmcgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGhlIDxzdHJvbmc+Q2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiwgYmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZGVwZW5kZW50cyB1bmRlciB0aGUgYWdlIG9mIDE3LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltaXplZCB0YXggYmVuZWZpdHMsIGtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkZ1bGwgbmFtZShzKSBvZiB0aGUgY2hpbGQgb3IgY2hpbGRyZW4uPC9saT5cclxuICAgICAgICA8bGk+RGF0ZShzKSBvZiBiaXJ0aCBmb3IgZWFjaCBjaGlsZC48L2xpPlxyXG4gICAgICAgIDxsaT5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyKHMpIGZvciBlYWNoIGNoaWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgc3RhdGVtZW50IGNvbmZpcm1pbmcgdGhlIGNoaWxkIG9yIGNoaWxkcmVuIGxpdmVkIHdpdGggeW91IGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgbGFzdCB5ZWFyLiBJZiBhcHBsaWNhYmxlLCBwbGVhc2UgaW5jbHVkZSBkb2N1bWVudGF0aW9uIG9mIGN1c3RvZHkgYXJyYW5nZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgb3ZlcnZpZXcgb2YgaG93IHlvdSBwcm92aWRlZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGVpciBmaW5hbmNpYWwgc3VwcG9ydCBsYXN0IHllYXIuIFRoaXMgY2FuIGluY2x1ZGUgcmVjb3JkcyBvZiBob3VzaW5nLCBmb29kLCBlZHVjYXRpb24sIG1lZGljYWwgY2FyZSwgYW5kIG90aGVyIHJlbGV2YW50IGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLCBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgdG8gYXNzaXN0IGluIGV2YWx1YXRpbmcgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbCBwaGFzZS1vdXRzIGJhc2VkIG9uIGluY29tZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgYWlkIGluIHRoZSBzd2lmdCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIHRoYXQgeW91IHJlY2VpdmUgYWxsIGVsaWdpYmxlIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWRkaXRpb25hbCBDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBZGRpdGlvbmFsIENoaWxkIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgbWF5IHF1YWxpZnkgZm9yIHRoZSA8c3Ryb25nPkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiBiYXNlZCBvbiB5b3VyIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBRdWFsaWZ5aW5nIENoaWxkcmVuOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgU29jaWFsIFNlY3VyaXR5IGNhcmRzIGFuZCBiaXJ0aCBjZXJ0aWZpY2F0ZXMgZm9yIGVhY2ggb2YgeW91ciBxdWFsaWZ5aW5nIGNoaWxkcmVuIHVuZGVyIHRoZSBhZ2Ugb2YgMTcuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZ1cm5pc2ggYWxsIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBwcm9vZiBvZiBpbmNvbWUgdG8gY29uZmlybSB5b3UgaGF2ZSBlYXJuZWQgYXQgbGVhc3QgJDIsNTAwLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXLigJlzIFRheCBSZXR1cm46PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIGxhc3QgeWVhcidzIHRheCByZXR1cm4gdG8gdmVyaWZ5IHRoZSBDaGlsZCBUYXggQ3JlZGl0IGFtb3VudCB5b3UgcmVjZWl2ZWQgb3Igd2VyZSBlbGlnaWJsZSB0byByZWNlaXZlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPklSUyBMZXR0ZXIgNjQxOTo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSB0aGUgSVJTIExldHRlciA2NDE5IGZvciB0aGUgdGF4IHllYXIgcmVnYXJkaW5nIHRoZSBhZHZhbmNlIENoaWxkIFRheCBDcmVkaXQgcGF5bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIHByb2Nlc3MsIHdlIGtpbmRseSBhc2sgeW91IHRvIHNlbmQgdGhlIGFib3ZlIGFzIHNvb24gYXMgcG9zc2libGUsIGVuc3VyaW5nIGFsbCBzdWJtaXNzaW9ucyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGFyZSBjb21taXR0ZWQgdG8gc2VydmluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBuZWVkcyBlZmZpY2llbnRseSBhbmQgc2VjdXJpbmcgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBmb3IgeW91IGFuZCB5b3VyIGZhbWlseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGljZWQgeW91IGluZGljYXRlZCBoYXZpbmcgZGVwZW5kZW50cyB0aGF0IG1heSBxdWFsaWZ5IGZvciB0aGUgPHN0cm9uZz5DcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHM8L3N0cm9uZz4uIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgeW91ciBlbGlnaWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBkZXBlbmRlbnRzLjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPkZ1bGwgbmFtZSBvZiBlYWNoIGRlcGVuZGVudC48L2xpPlxyXG4gICAgICA8bGk+VGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdSAoZS5nLiwgcGFyZW50LCBzaWJsaW5nLCBhZHVsdCBjaGlsZCwgb3Igb3RoZXIpLjwvbGk+XHJcbiAgICAgIDxsaT5UaGVpciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9yIEluZGl2aWR1YWwgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChJVElOKS48L2xpPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLiBQbGVhc2UgcHJvdmlkZSBhbnkgcmVsZXZhbnQgZGV0YWlscyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhpcyBjbGFpbSAoaWYgYXZhaWxhYmxlKS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgbGlzdCBvZiB0aGUgZmluYW5jaWFsIHN1cHBvcnQgeW91IHByb3ZpZGVkLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGZvb2QsIHNoZWx0ZXIsIGNsb3RoaW5nLCBtZWRpY2FsIGNhcmUsIGVkdWNhdGlvbiwgYW5kIHRyYW5zcG9ydGF0aW9uIGNvc3RzLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgaW5jb21lIGluZm9ybWF0aW9uIGZvciBlYWNoIGRlcGVuZGVudC4gVGhpcyBpbmNsdWRlcyBpbmNvbWUgc3RhdGVtZW50cyBvciBhbiBhZmZpcm1hdGlvbiB0aGF0IHRoZXkgaGFkIG5vIGluY29tZS48L2xpPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBhcmUgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4gb2YgdGhlIFVuaXRlZCBTdGF0ZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugc2VuZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD4gXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UncmUgaGVyZSB0byBoZWxwIG1ha2UgeW91ciB0YXggZmlsaW5nIHByb2Nlc3MgYXMgc21vb3RoIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkb3B0aW9uIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRvcHRpb24gQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBoYXZpbmcgZXhwZW5zZXMgcmVsYXRlZCB0byBhZG9wdGluZyBhIGNoaWxkIGxhc3QgeWVhci4gVG8gYWNjdXJhdGVseSBjbGFpbSB0aGUgQWRvcHRpb24gQ3JlZGl0IG9uIHlvdXIgdGF4IHJldHVybnMsIHdlIHJlcXVpcmUgc3BlY2lmaWMgZG9jdW1lbnRhdGlvbi48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5GaW5hbGl6ZWQgQWRvcHRpb24gRGVjcmVlIG9yIENlcnRpZmljYXRlLjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxlZCBMZWdhbCBGZWVzIEludm9pY2UgKGluY2x1ZGluZyB0aGUgYXR0b3JuZXnigJlzIG5hbWUsIGFkZHJlc3MsIGFuZCB0aGUgZGF0ZSBvZiBzZXJ2aWNlKS48L2xpPlxyXG4gICAgICA8bGk+Q291cnQgQ29zdHMgUmVjZWlwdHMuPC9saT5cclxuICAgICAgPGxpPlRyYXZlbCBFeHBlbnNlcyBSZWNlaXB0cyAoYWlyZmFyZSwgaG90ZWwsIG1lYWxzKSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhZG9wdGlvbiBwcm9jZXNzLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcmVsZXZhbnQgZG9jdW1lbnRzIGZvciBhIGNoaWxkIHdpdGggc3BlY2lhbCBuZWVkcywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICA8bGk+Rm9yZWlnbiBhZG9wdGlvbjogUHJvdmlkZSB0aGUgY291bnRyeSdzIGxlZ2FsIGRvY3VtZW50YXRpb24gcHJvdmluZyB0aGUgYWRvcHRpb24gd2FzIGZpbmFsaXplZC48L2xpPlxyXG4gICAgICA8bGk+SVJTIEZvcm0gODgzOSwgUXVhbGlmaWVkIEFkb3B0aW9uIEV4cGVuc2VzIChpZiB5b3UgaGF2ZSBhbHJlYWR5IGF0dGVtcHRlZCB0byBjb21wbGV0ZSB0aGlzKS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIEluY29tcGxldGUgb3IgdW5jbGVhciBkb2N1bWVudGF0aW9uIG1heSBkZWxheSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRoZSBwb3RlbnRpYWwgY3JlZGl0LjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBhc3Npc3QgeW91IGluIG1heGltaXppbmcgeW91ciBiZW5lZml0cyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5CYXNlZCBvbiB5b3VyIGFmZmlybWF0aXZlIHJlc3BvbnNlIHJlZ2FyZGluZyBleHBlbnNlcyBwYWlkIGxhc3QgeWVhciBmb3IgY29sbGVnZSwgd2UgbWF5IGJlIGFibGUgdG8gY2xhaW0gdGhlIEFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgKEFPVEMpIG9uIHlvdXIgYmVoYWxmLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgYW5kIG9wdGltaXplIHlvdXIgdGF4IHJldHVybnMgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgQU9UQywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+VHVpdGlvbiBTdGF0ZW1lbnRzPC9zdHJvbmc+IChGb3JtIDEwOTgtVCkgZm9yIGVhY2ggc3R1ZGVudCBmb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBwYWlkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5IHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZWNlaXB0cyBhbmQgUmVjb3Jkczwvc3Ryb25nPiBmb3IgcmVsYXRlZCBlZHVjYXRpb25hbCBleHBlbnNlcyBub3QgY292ZXJlZCBieSB0aGUgdHVpdGlvbiBzdGF0ZW1lbnQuIFRoaXMgaW5jbHVkZXMgYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZSBzdHVkZW50IHdhcyBlbnJvbGxlZCA8c3Ryb25nPmF0IGxlYXN0IGhhbGYtdGltZTwvc3Ryb25nPiBpbiBhIHByb2dyYW0gbGVhZGluZyB0byBhIGRlZ3JlZSwgY2VydGlmaWNhdGUsIG9yIG90aGVyIHJlY29nbml6ZWQgZWR1Y2F0aW9uYWwgY3JlZGVudGlhbC48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnQgY29uZmlybWluZyB0aGF0IHRoZSBleHBlbnNlcyB3ZXJlIGZvciB0aGUgPHN0cm9uZz5maXJzdCBmb3VyIHllYXJzPC9zdHJvbmc+IG9mIHBvc3Qtc2Vjb25kYXJ5IGVkdWNhdGlvbi48L2xpPlxyXG4gICAgICA8bGk+RXZpZGVuY2UgdG8gc2hvdyB0aGF0IHRoZSBzdHVkZW50IGhhZCBub3QgY2xhaW1lZCB0aGUgQU9UQyAob3IgdGhlIGZvcm1lciBIb3BlIGNyZWRpdCkgZm9yIG1vcmUgdGhhbiBmb3VyIHRheCB5ZWFycy48L2xpPlxyXG4gICAgICA8bGk+UHJvb2YgdGhhdCBuZWl0aGVyIHRoZSBzdHVkZW50IG5vciB0aGUgY2xhaW1hbnQgKGlmIG5vdCB0aGUgc3R1ZGVudCkgaXMgYSBub25yZXNpZGVudCBhbGllbiBmb3IgdGF4IHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgIDxsaT5BIHN0YXRlbWVudCBpbmRpY2F0aW5nIGlmIGFueSBmZWxvbnkgZHJ1ZyBjb252aWN0aW9ucyB3ZXJlIHJlY2VpdmVkIGJ5IHRoZSBzdHVkZW50IGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaXMgZXNzZW50aWFsIGFzIHN1Y2ggY29udmljdGlvbnMgZGlzcXVhbGlmeSB0aGUgc3R1ZGVudCBmcm9tIGNsYWltaW5nIHRoZSBBT1RDLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gT25jZSB3ZSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCB3ZSB3aWxsIHByb2NlZWQgd2l0aCB0aGUgbWF4aW1pemF0aW9uIGFuZCBhcHBsaWNhdGlvbiBvZiB0aGUgQW1lcmljYW4gT3Bwb3J0dW5pdHkgVGF4IENyZWRpdCB0byB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcywgd2UndmUgbm90ZWQgdGhhdCB5b3UsIHlvdXIgc3BvdXNlLCBvciB5b3VyIGRlcGVuZGVudHMgaGF2ZSBwYWlkIGZvciBoaWdoZXIgZWR1Y2F0aW9uIGxhc3QgeWVhci4gVGhpcyBtYWtlcyB5b3UgcG90ZW50aWFsbHkgZWxpZ2libGUgZm9yIHRoZSBMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0LCB3aGljaCBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggc2F2aW5ncy4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgeW91ciBlbGlnaWJpbGl0eSBhbmQgY2FsY3VsYXRlIHRoZSBjcmVkaXQsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+Rm9ybSAxMDk4LVQgZnJvbSBlYWNoIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGF0dGVuZGVkIGJ5IHlvdSwgeW91ciBzcG91c2UsIG9yIGRlcGVuZGVudHMuIFRoaXMgZm9ybSBzaG93cyB0aGUgYW1vdW50cyBwYWlkIGZvciB0dWl0aW9uIGFuZCByZWxhdGVkIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHBheW1lbnRzIG1hZGUgZm9yIHR1aXRpb24sIGZlZXMsIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgeW91ciBjb3Vyc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHJvb20gYW5kIGJvYXJkLCBpbnN1cmFuY2UsIG1lZGljYWwgZXhwZW5zZXMsIGFuZCB0cmFuc3BvcnRhdGlvbiBhcmUgbm90IHF1YWxpZmllZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYW55IHNjaG9sYXJzaGlwcywgZ3JhbnRzLCBvciBvdGhlciB0YXgtZnJlZSBlZHVjYXRpb25hbCBhc3Npc3RhbmNlIHJlY2VpdmVkLiBUaGlzIGhlbHBzIHVzIGRldGVybWluZSB0aGUgbmV0IGFtb3VudCBvZiBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgYW55IHJlY29yZHMgb2YgZmVsb25pZXMgKGFzIGluZGl2aWR1YWxzIHdpdGggZmVsb255IGRydWcgY29udmljdGlvbnMgYXJlIG5vdCBlbGlnaWJsZSBmb3IgdGhpcyBjcmVkaXQpLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZXhwZW5zZXMgcGFpZCB3aXRoIGRpc3RyaWJ1dGVkIGVhcm5pbmdzIGZyb20gYSA1MjkgcGxhbiwgaWYgYW55LiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgYXMgaXQgbWF5IGFmZmVjdCB0aGUgY3JlZGl0IGNhbGN1bGF0aW9uLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgZm9yIHRoZSB0YXggeWVhciB3ZSBhcmUgcHJlcGFyaW5nIHlvdXIgcmV0dXJuIGZvci4gR2F0aGVyaW5nIGFuZCB2ZXJpZnlpbmcgdGhlc2UgZG9jdW1lbnRzIGVhcmx5IGluIHRoZSBwcm9jZXNzIHdpbGwgc3RyZWFtbGluZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGJlbmVmaXQgbGVnYWxseSBhdmFpbGFibGUgdG8geW91LjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBncmVhdGx5IGFpZCBpbiB0aGUgZWZmaWNpZW50IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFYXJuZWQgSW5jb21lIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IGVhcm5lZCBtb25leSBmcm9tIHdvcmsgYW5kIGhhdmUgYSByZWxhdGl2ZWx5IGxvdyB0byBtb2RlcmF0ZSBpbmNvbWUgbGFzdCB5ZWFyLCB5b3UgbWF5IGJlIGVsaWdpYmxlIGZvciB0aGUgRWFybmVkIEluY29tZSBUYXggQ3JlZGl0IChFSVRDKS4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgeW91ciBlbGlnaWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciBFSVRDIGNsYWltLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBXLTIgZm9ybXMgaWYgeW91IHdlcmUgZW1wbG95ZWQgYnkgc29tZW9uZSBlbHNlLCBvciBhIHN1bW1hcnkgb2YgaW5jb21lIGFuZCBleHBlbnNlcyBpZiB5b3Ugd2VyZSBzZWxmLWVtcGxveWVkIG9yIHJhbiBhIGJ1c2luZXNzIG9yIGZhcm0uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pOjwvc3Ryb25nPiBDb3BpZXMgb2YgU29jaWFsIFNlY3VyaXR5IGNhcmRzIGZvciB5b3UsIHlvdXIgc3BvdXNlIChpZiBmaWxpbmcgam9pbnRseSksIGFuZCBhbnkgZGVwZW5kZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jeTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IHlvdXIgY2hpbGQocmVuKSBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgVW5pdGVkIFN0YXRlcyBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLiBUaGlzIGNhbiBpbmNsdWRlIHNjaG9vbCByZWNvcmRzLCBtZWRpY2FsIHJlY29yZHMsIG9yIGEgc2lnbmVkIGxldHRlciBmcm9tIGEgbGFuZGxvcmQgb3IgYW5vdGhlciB0aGlyZCBwYXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW5jb21lIFN0YXRlbWVudDo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIHByb3ZpZGUgYSBzdGF0ZW1lbnQgb2YgYW55IGludmVzdG1lbnQgaW5jb21lIHlvdSByZWNlaXZlZCwgYXMgdGhpcyBjYW4gYWZmZWN0IEVJVEMgZWxpZ2liaWxpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GaWxpbmcgU3RhdHVzIFZlcmlmaWNhdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB5b3VyIGZpbGluZyBzdGF0dXMgdG8gZW5zdXJlIHByb3BlciBFSVRDIGNhbGN1bGF0aW9uLiBUaGlzIGNvdWxkIGJlIFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgSGVhZCBvZiBIb3VzZWhvbGQsIGV0Yy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXIgVGF4IFJldHVybjo8L3N0cm9uZz4gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHllYXIgeW91IGFyZSBjbGFpbWluZyBFSVRDIG9yIGlmIHlvdSB3ZXJlIGVsaWdpYmxlIGZvciBFSVRDIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHlvdXIgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIHN1Ym1pdHRlZCBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIEVJVEMgY2xhaW0uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGljZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIGNvbnRyaWJ1dGluZyB0byBhIHJldGlyZW1lbnQgcGxhbiBpbiB0aGUgbGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0LFwiIHdlIHJlcXVpcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgY29udHJpYnV0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHJldGlyZW1lbnQgcGxhbnMgeW91J3ZlIGNvbnRyaWJ1dGVkIHRvIChlLmcuLCBJUkEsIDQwMShrKSwgZXRjLik6PC9saT5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxsaT5OYW1lIG9mIHRoZSBwbGFuKHMpPC9saT5cclxuICAgICAgICA8bGk+VHlwZSBvZiBwbGFuKHMpPC9saT5cclxuICAgICAgICA8bGk+Q29udHJpYnV0ZWQgYW1vdW50IHRvIGVhY2ggcGxhbjwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgKFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgZXRjLik8L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvZiB0aGUgY29udHJpYnV0aW9ucyAoZS5nLiwgYWNjb3VudCBzdGF0ZW1lbnRzLCBGb3JtIDU0OTgsIHRyYW5zYWN0aW9uIHN1bW1hcmllcyk8L2xpPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIG9mIHlvdXIgYWdlLCB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHk8L2xpPlxyXG4gICAgICA8bGk+QW55IG5vdGljZXMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBwbGFuIGFkbWluaXN0cmF0b3IgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnM8L2xpPlxyXG4gICAgICA8bGk+Rm9yIG1hcnJpZWQgZmlsaW5nIGpvaW50bHksIHNpbWlsYXIgZGV0YWlscyBmb3IgeW91ciBzcG91c2XigJlzIGNvbnRyaWJ1dGlvbnMsIGlmIGFwcGxpY2FibGU8L2xpPlxyXG4gICAgPC9vbD4gIFxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGluIGEgdGltZWx5IG1hbm5lciB0byBmYWNpbGl0YXRlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPiBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdXIgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgbGFzdCB5ZWFyLCB5b3Ugd29ya2VkIGZvciB0d28gb3IgbW9yZSBlbXBsb3llcnMgYW5kIGhhZCBhIHRvdGFsIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgd2l0aGhlbGQgZnJvbSB5b3VyIHBheWNoZWNrcyB0aGF0IGV4Y2VlZGVkIHRoZSBsaW1pdCBmb3IgdGhlIHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgcG90ZW50aWFsIEV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0IGFuZCBlbnN1cmUgcHJvcGVyIGFkanVzdG1lbnQgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm1zIGZyb20gQWxsIEVtcGxveWVyczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIFctMiBmb3JtcyBmcm9tIGFsbCB5b3VyIGVtcGxveWVycyBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLiBUaGlzIGlzIHZpdGFsIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBQYXkgU3R1YnM6PC9zdHJvbmc+IElmIHBvc3NpYmxlLCBpbmNsdWRlIHlvdXIgZmluYWwgcGF5IHN0dWJzIG9mIHRoZSB5ZWFyIGZyb20gZWFjaCBlbXBsb3llci4gVGhpcyBjYW4gaGVscCB2ZXJpZnkgdGhlIHRvdGFsIGVhcm5pbmdzIGFuZCB0aGUgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQsIGVzcGVjaWFsbHkgaWYgYW55IGRpc2NyZXBhbmNpZXMgYXJpc2Ugd2l0aCB0aGUgVy0yIGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgSW5mb3JtYXRpb246PC9zdHJvbmc+IEVuc3VyZSB5b3VyIGZ1bGwgbmFtZSwgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSwgYW5kIGN1cnJlbnQgYWRkcmVzcyBhcmUgY29ycmVjdCBhbmQgdXBkYXRlZCBmb3IgYWNjdXJhdGUgZmlsaW5nLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29uZmlybWF0aW9uIExldHRlciAoSWYgQXZhaWxhYmxlKTo8L3N0cm9uZz4gSWYgeW91J3ZlIHJlY2VpdmVkIGFueSBjb25maXJtYXRpb24gZnJvbSB0aGUgSVJTIG9yIHlvdXIgZW1wbG95ZXJzIHJlZ2FyZGluZyBleGNlc3MgU29jaWFsIFNlY3VyaXR5IGNvbnRyaWJ1dGlvbnMsIHBsZWFzZSBpbmNsdWRlIHRoZXNlIGNvbW11bmljYXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGNvbXBsZXRpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmluZyB0aGF0IHlvdSByZWNlaXZlIGFueSByZWZ1bmQgb2YgZXhjZXNzIFNvY2lhbCBTZWN1cml0eSB0YXhlcyBwYWlkLiBQbGVhc2Ugc2VuZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCB0byB1cy4gWW91ciBwcm9tcHQgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBmYWNpbGl0YXRlIGEgc21vb3RoIHRheCBmaWxpbmcgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJlbWl1bSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IG9yIGEgZmFtaWx5IG1lbWJlciBlbnJvbGxlZCBpbiBhIGhlYWx0aCBpbnN1cmFuY2UgcGxhbiB0aHJvdWdoIHRoZSBNYXJrZXRwbGFjZSBsYXN0IHllYXIuIFRoaXMgbWF5IG1ha2UgeW91IGVsaWdpYmxlIGZvciB0aGUgUHJlbWl1bSBUYXggQ3JlZGl0LCB3aGljaCBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCBzYXZpbmdzIG9uIHlvdXIgdGF4IGJpbGwuPC9wPlxyXG4gICAgPHA+VG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBQcmVtaXVtIFRheCBDcmVkaXQgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29ycmVjdGx5IGZpbGVkLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk1LUEsIEhlYWx0aCBJbnN1cmFuY2UgTWFya2V0cGxhY2UgU3RhdGVtZW50PC9zdHJvbmc+OiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9mIHRoZSBoZWFsdGggY292ZXJhZ2UsIGluY2x1ZGluZyB0aGUgbW9udGhzIG9mIGNvdmVyYWdlIGFuZCB0aGUgYW1vdW50IG9mIHByZW1pdW0gcGFpZC4gSWYgeW91IG9yIGFueSBmYW1pbHkgbWVtYmVyIHdhcyBlbnJvbGxlZCBpbiBkaWZmZXJlbnQgcGxhbnMsIHBsZWFzZSBwcm92aWRlIGEgRm9ybSAxMDk1LUEgZm9yIGVhY2ggcGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjwvc3Ryb25nPjogUGxlYXNlIHByb3ZpZGUgYWxsIHNvdXJjZXMgb2YgaW5jb21lIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgaG91c2Vob2xkIGluY29tZS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBXLTIgZm9ybXMsIDEwOTkgZm9ybXMsIGFuZCBhbnkgb3RoZXIgZG9jdW1lbnRhdGlvbiBkZW1vbnN0cmF0aW5nIGluY29tZSByZWNlaXZlZCB0aHJvdWdob3V0IHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmFtaWx5IFNpemUgYW5kIEhvdXNlaG9sZCBJbmZvcm1hdGlvbjwvc3Ryb25nPjogQ29uZmlybSB0aGUgbnVtYmVyIG9mIGRlcGVuZGVudHMgYW5kIGFueSBjaGFuZ2VzIGluIHlvdXIgaG91c2Vob2xkIGxhc3QgeWVhciwgYXMgdGhpcyBjb3VsZCBhZmZlY3QgeW91ciBlbGlnaWJpbGl0eSBhbmQgdGhlIGFtb3VudCBvZiB0aGUgY3JlZGl0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWR2YW5jZWQgUHJlbWl1bSBUYXggQ3JlZGl0IChBUFRDKSBSZXBheW1lbnQgSW5mb3JtYXRpb248L3N0cm9uZz4sIGlmIGFwcGxpY2FibGU6IElmIHlvdSByZWNlaXZlZCBhbiBhZHZhbmNlIHBheW1lbnQgb2YgdGhlIHByZW1pdW0gdGF4IGNyZWRpdCwgd2UgbmVlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgcGF5bWVudHMgdG8gcmVjb25jaWxlIHRoZSBhbW91bnQgb24geW91ciByZXR1cm4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIHNlcnZpbmcgeW91IGFuZCBlbnN1cmluZyB5b3UgcmVjZWl2ZSBhbGwgdGhlIHRheCBiZW5lZml0cyB5b3UgYXJlIGVudGl0bGVkIHRvLjwvcD5gXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk5ldCBJbnZlc3RtZW50IEluY29tZSBUYXhcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5ldCBJbnZlc3RtZW50IEluY29tZSBUYXhcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncywgd2UgaGF2ZSBpZGVudGlmaWVkIHRoYXQgeW91ciBpbmNvbWUgdGhpcyB5ZWFyIGluY2x1ZGVzIHNpZ25pZmljYW50IGFtb3VudHMgZnJvbSBpbnZlc3RtZW50cy4gVG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4LCBpdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBnYXRoZXIgY29tcHJlaGVuc2l2ZSBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGludmVzdG1lbnQgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+SW50ZXJlc3QgSW5jb21lIFN0YXRlbWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBzdWNoIGFzIDEwOTktSU5UIG9yIHNpbWlsYXIgZm9ybXMgc2hvd2luZyBpbnRlcmVzdCBlYXJuZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRpdmlkZW5kIEluY29tZSBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudHMgc3VjaCBhcyAxMDk5LURJViBvciBzaW1pbGFyIGZvcm1zIGRldGFpbGluZyBkaXZpZGVuZCBpbmNvbWUgcmVjZWl2ZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkNhcGl0YWwgR2FpbnMgUmVjb3Jkczo8L3N0cm9uZz4gU2FsZXMgcmVjZWlwdHMgb3IgYnJva2VyIHN0YXRlbWVudHMgc2hvd2luZyBwcm9jZWVkcyBmcm9tIHRoZSBzYWxlIG9mIGFzc2V0cywgYWxvbmcgd2l0aCBwdXJjaGFzZSBkb2N1bWVudGF0aW9uIHRvIGNhbGN1bGF0ZSBnYWlucyBvciBsb3NzZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlJlbnRhbCBhbmQgUm95YWx0eSBJbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBpbmNvbWUgYW5kIGFzc29jaWF0ZWQgZXhwZW5zZXMgZnJvbSByZW50YWwgcHJvcGVydGllcyBvciByb3lhbHRpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPk5vbi1RdWFsaWZpZWQgQW5udWl0aWVzIFN0YXRlbWVudHM6PC9zdHJvbmc+IFllYXItZW5kIHN0YXRlbWVudHMgZm9yIGFueSBub24tcXVhbGlmaWVkIGFubnVpdHkgY29udHJhY3RzIHNob3dpbmcgZGlzdHJpYnV0aW9ucyByZWNlaXZlZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Rm9ybSA4OTYwOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGFueSBwcmlvciB5ZWFyIEZvcm0gODk2MCB5b3UgaGF2ZSBmaWxlZCBmb3IgTmV0IEludmVzdG1lbnQgSW5jb21lIFRheCwgd2hpY2ggY2FuIHByb3ZpZGUgYSBiYXNpcyBmb3IgZXN0aW1hdGVzIGFuZCBwbGFubmluZy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkVuc3VyaW5nIHdlIGhhdmUgYWxsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB3aWxsIG5vdCBvbmx5IHN0cmVhbWxpbmUgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2VzcyBidXQgYWxzbyBoZWxwIGluIGxldmVyYWdpbmcgcG90ZW50aWFsIHRheC1zYXZpbmcgb3Bwb3J0dW5pdGllcyByZWxhdGVkIHRvIGludmVzdG1lbnQgaW5jb21lLiBQbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgYW55IG9mIHRoZSBhYm92ZSBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRkaXRpb25hbCBNZWRpY2FyZSBUYXhcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdXIgaW5jb21lIG1heSBleGNlZWQgdGhlIElSUyB0aHJlc2hvbGRzIGZvciB0aGUgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggZm9yIHlvdXIgZmlsaW5nIHN0YXR1cy4gSW4gb3JkZXIgdG8gYWNjdXJhdGVseSBhc3Nlc3MgYW5kIHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIGZpbGluZyBzdGF0dXMgZm9yIHRoZSB0YXggeWVhciAoTWFycmllZCBGaWxpbmcgSm9pbnRseSwgTWFycmllZCBGaWxpbmcgU2VwYXJhdGVseSwgU2luZ2xlLCBIZWFkIG9mIEhvdXNlaG9sZCwgUXVhbGlmeWluZyBTdXJ2aXZpbmcgU3BvdXNlKS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvZiBhbGwgc291cmNlcyBvZiBpbmNvbWUgZm9yIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+Vy0yIEZvcm1zIGZyb20gYWxsIGVtcGxveWVycy48L2xpPlxyXG4gICAgICAgICAgPGxpPjEwOTkgRm9ybXMgKGlmIGFwcGxpY2FibGUpLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICA8bGk+MTA5OS1NSVNDIGZvciBpbmRlcGVuZGVudCBjb250cmFjdG9ycy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT4xMDk5LUlOVCBmb3IgaW50ZXJlc3QgZWFybmluZ3MuPC9saT5cclxuICAgICAgICAgICAgICA8bGk+MTA5OS1ESVYgZm9yIGRpdmlkZW5kcy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgMTA5OSBmb3JtcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGFueSBvdGhlciBpbmNvbWUgKGUuZy4sIGZvcmVpZ24gaW5jb21lLCByZW50YWwgaW5jb21lKS48L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgZGVkdWN0aW9ucyBvciBleGNsdXNpb25zIHRvIGluY29tZSB0aGF0IHlvdSBpbnRlbmQgdG8gY2xhaW0gKGUuZy4sIElSQSBjb250cmlidXRpb25zLCBzdHVkZW50IGxvYW4gaW50ZXJlc3QpLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+V2UgYWxzbyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBhcmUgc2VsZi1lbXBsb3llZCwgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMgd2lsbCBiZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggb2JsaWdhdGlvbnMuPC9wPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcG90ZW50aWFsIEFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4IGxpYWJpbGl0aWVzLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOYW5ueSBUYXhcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5hbm55IFRheFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCBlbXBsb3lpbmcgaG91c2Vob2xkIGhlbHAgc3VjaCBhcyBhIG5hbm55LCBob3VzZWtlZXBlciwgb3IgZ2FyZGVuZXIuIFRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIHNvLWNhbGxlZCBcIk5hbm55IFRheFwiIHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+Q29tcGxldGUgbmFtZSwgYWRkcmVzcywgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb2YgdGhlIGVtcGxveWVlLjwvbGk+XHJcbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCBwYWlkIHRvIHRoZSBlbXBsb3llZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBhbW91bnRzIHdpdGhoZWxkIGZyb20gdGhlIGVtcGxveWVlJ3MgcGF5IGZvciB0YXhlcywgaW5jbHVkaW5nIEZlZGVyYWwgSW5jb21lIFRheCwgU29jaWFsIFNlY3VyaXR5LCBhbmQgTWVkaWNhcmUgVGF4ZXMuPC9saT5cclxuICAgICAgICA8bGk+Q29waWVzIG9mIGFueSBlbXBsb3ltZW50IGNvbnRyYWN0cyBvciBhZ3JlZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIGFueSBlbXBsb3llciBjb250cmlidXRpb25zIHRvIFNvY2lhbCBTZWN1cml0eSwgTWVkaWNhcmUsIGFuZCB3aXRoaGVsZCBpbmNvbWUgdGF4ZXMgKGlmIGFwcGxpY2FibGUpLjwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgZW1wbG95bWVudCBzdGF0dXMgKGUuZy4sIFNjaGVkdWxlIEggZm9ybSkuPC9saT5cclxuICAgICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IHRheCBkb2N1bWVudHMgb3IgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZW1wbG95bWVudC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGF2b2lkaW5nIHBlbmFsdGllcyBmb3Igbm9uLWNvbXBsaWFuY2UuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGFyZSBoZXJlIHRvIGhlbHAgeW91IG5hdmlnYXRlIHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmVpZ24gRWFybmVkIEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGVhcm5lZCBpbmNvbWUgZnJvbSBmb3JlaWduIHNvdXJjZXMgdGhpcyBwYXN0IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGFuZCBwb3RlbnRpYWxseSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgRm9yZWlnbiBFYXJuZWQgSW5jb21lIEV4Y2x1c2lvbiBvciBjcmVkaXQsIHdlJ2xsIG5lZWQgc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb24gZnJvbSB5b3UuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGZvcmVpZ24gZWFybmVkIGluY29tZS4gVGhpcyBpbmNsdWRlcyBhbnkgd2FnZXMsIHNhbGFyaWVzLCBvciBvdGhlciBjb21wZW5zYXRpb24gcmVjZWl2ZWQgZnJvbSBzZXJ2aWNlcyBwZXJmb3JtZWQgd2hpbGUgbGl2aW5nIGFicm9hZC48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZS4gVGhpcyBjb3VsZCBiZSBpbiB0aGUgZm9ybSBvZiBwYXkgc3R1YnMsIGJhbmsgc3RhdGVtZW50cyByZWZsZWN0aW5nIGRpcmVjdCBkZXBvc2l0cywgb3IgZXF1aXZhbGVudCBkb2N1bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gb24gdGhlIGNvdW50cnkgb3IgY291bnRyaWVzIGluIHdoaWNoIHlvdSBlYXJuZWQgdGhpcyBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+RGF0ZXMgb2YgeW91ciByZXNpZGVuY3kgaW4gZWFjaCBmb3JlaWduIGNvdW50cnkuPC9saT5cclxuICAgICAgICA8bGk+QW55IHRheCByZXNpZGVuY3kgY2VydGlmaWNhdGVzIG9yIHN0YXRlbWVudHMgZnJvbSBmb3JlaWduIHRheCBhdXRob3JpdGllcy48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBmb3JlaWduIHRheCBwYWlkLCBpbmNsdWRpbmcgdGF4IHJldHVybnMgZmlsZWQgaW4gdGhlIGZvcmVpZ24gY291bnRyeSwgaWYgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPlJlY29yZHMgb2YgeW91ciBVLlMuIGFuZCBmb3JlaWduIGFkZHJlc3NlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSB0YXggdHJlYXRpZXMgYmV0d2VlbiB0aGUgVS5TLiBhbmQgdGhlIGNvdW50cnkgb3IgY291bnRyaWVzIHlvdSB3b3JrZWQgaW4uPC9saT5cclxuICAgICAgICA8bGk+QSBzaWduZWQgRm9ybSAyNTU1IG9yIDI1NTUtRVosIGlmIHlvdSBoYXZlIGFscmVhZHkgcHJlcGFyZWQgdGhpcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoZXNlIGRvY3VtZW50cyBhbmQgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGJlc3QgYXBwcm9hY2ggdG8gaGFuZGxlIHlvdXIgZm9yZWlnbiBlYXJuZWQgaW5jb21lIGFuZCBwb3RlbnRpYWxseSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5QbGVhc2UgaGF2ZSB0aGVzZSBtYXRlcmlhbHMgcmVhZHkgYW5kIHNlbmQgdGhlbSB0byB1cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGUgaXRlbXMgcmVxdWVzdGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSB3aXRoIHlvdXIgdGF4ZXMuPC9wPmBcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UndmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBpbmN1cnJpbmcgZWxpZ2libGUgZXhwZW5zZXMgZm9yIHRoZSBGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uIGR1ZSB0byBlYXJuaW5nIGluY29tZSBpbiBhIGZvcmVpZ24gY291bnRyeSBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGV4Y2x1c2lvbiBwb3NzaWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIGN1cnJlbnQgbGVhc2Ugb3IgcmVudGFsIGFncmVlbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlV0aWxpdHkgQmlsbHM6PC9zdHJvbmc+IENvcGllcyBvZiB1dGlsaXR5IGJpbGxzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24gKGV4Y2x1ZGluZyB0ZWxlcGhvbmUgY2hhcmdlcykuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgRG9jdW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudHMgcHJvdmluZyBwYXltZW50IG9mIHJlYWwgZXN0YXRlIG9yIHJlbnRhbCBpbnN1cmFuY2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PdGhlciBIb3VzaW5nIENvc3RzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBhbnkgYWRkaXRpb25hbCBlbGlnaWJsZSBob3VzaW5nIGNvc3RzIG5vdCBwcmV2aW91c2x5IG1lbnRpb25lZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZvcmVpZ24gSW5jb21lOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHZlcmlmeWluZyB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSAoZS5nLiwgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9jYXRpb24gYW5kIER1cmF0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIHN0YXRlbWVudCBkZXRhaWxpbmcgdGhlIGxvY2F0aW9uIG9mIHlvdXIgZm9yZWlnbiByZXNpZGVuY2UgYW5kIHRoZSBkdXJhdGlvbiBvZiB5b3VyIHN0YXkgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgZWxlY3Ryb25pY2FsbHkuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZXNlIGRvY3VtZW50cyBhcmUgZXNzZW50aWFsIGZvciBhIGNvcnJlY3QgYW5kIG9wdGltaXplZCBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGUgcmVxdWlyZWQgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgYXQgeW91ciBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIHRoZSBxdWVzdGlvbiBjb25jZXJuaW5nIHBvdGVudGlhbCBlbGlnaWJpbGl0eSBmb3IgdGhlIDxzdHJvbmc+Rm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvbjwvc3Ryb25nPi4gVGhpcyBkZWR1Y3Rpb24gaXMgZGVzaWduZWQgdG8gaGVscCBtaXRpZ2F0ZSB0aGUgaGlnaGVyIGNvc3Qgb2YgbGl2aW5nIGFicm9hZCBieSBhbGxvd2luZyBjZXJ0YWluIGhvdXNpbmcgZXhwZW5zZXMgdG8gYmUgZGVkdWN0ZWQgZm9yIHRheCBwdXJwb3Nlcy48L3A+XHJcbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggZmlsaW5nIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYWxsb3dhYmxlIGRlZHVjdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHJlbGF0ZWQgdG8geW91ciBob3VzaW5nIGV4cGVuc2VzIGluY3VycmVkIHdoaWxlIHdvcmtpbmcgYWJyb2FkOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIHJlbnRhbCBhZ3JlZW1lbnQgb3IgbGVhc2UgdGhhdCBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiByZW50IHBhaWQgYW5kIHRoZSBwZXJpb2Qgb2Ygb2NjdXBhbmN5LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5VdGlsaXR5IEJpbGxzOjwvc3Ryb25nPiBDb3BpZXMgb2YgdXRpbGl0eSBiaWxscyBmb3IgdGhlIHBlcmlvZCB5b3UgYXJlIGNsYWltaW5nIHRoZSBkZWR1Y3Rpb24uIFRoaXMgaW5jbHVkZXMgZWxlY3RyaWNpdHksIHdhdGVyLCBhbmQgZ2FzLCBidXQgZXhjbHVkZXMgdGVsZXBob25lIGNoYXJnZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlJlYWwgRXN0YXRlIEluc3VyYW5jZTo8L3N0cm9uZz4gRG9jdW1lbnQgcHJvb2Ygb2YgYW55IHJlYWwgZXN0YXRlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkIGZvciB5b3VyIGZvcmVpZ24gaG91c2luZy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+T3RoZXIgRWxpZ2libGUgRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBhbnkgYWRkaXRpb25hbCBlbGlnaWJsZSBsaXZpbmcgZXhwZW5zZXMgbm90IGNvdmVyZWQgYWJvdmUuIFBsZWFzZSBub3RlLCB0byBxdWFsaWZ5LCB0aGVzZSBleHBlbnNlcyBtdXN0IGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciBmb3JlaWduIGhvdXNpbmcgYW5kIG5vdCBjb3ZlcmVkIHVuZGVyIHRoZSBiYXNlIGFtb3VudCBleGVtcHRpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gRWFybmVkIEluY29tZTo8L3N0cm9uZz4gVmVyaWZpY2F0aW9uIG9mIHlvdXIgZWFybmVkIGluY29tZSB3aGlsZSB3b3JraW5nIGFicm9hZCwgYXMgdGhlIGRlZHVjdGlvbiBpcyB0aWVkIHRvIGNlcnRhaW4gaW5jb21lIGxpbWl0YXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGlzIG1heSBpbnZvbHZlIGdhdGhlcmluZyBzZXZlcmFsIGRvY3VtZW50cywgYnV0IGVuc3VyaW5nIHdlIGhhdmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIG1heGltaXppbmcgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucyBhbmQgcmVtYWluaW5nIGNvbXBsaWFudCB3aXRoIHRheCByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgdG8gZGlzY3VzcyBhbnkgY2hhbGxlbmdlcyB5b3UgbWF5IGZhY2UgaW4gb2J0YWluaW5nIHRoZW0uIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmBcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY2xhaW1pbmcgeW91ciBGb3JlaWduIFRheCBDcmVkaXQsIGFzIGluZGljYXRlZCBieSB5b3VyIGFmZmlybWF0aXZlIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB5b3UgcGFpZCB0YXhlcyB0byBhIGZvcmVpZ24gY291bnRyeSBvbiBlYXJuZWQgaW5jb21lIHRoZXJlLiBUbyBwcm9wZXJseSBjYWxjdWxhdGUgYW5kIGFwcGx5IHRoaXMgY3JlZGl0IHRvIHlvdXIgVS5TLiB0YXggcmV0dXJuLCB3ZSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FYXJuZWQgSW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFueSBkb2N1bWVudHMgdGhhdCB2ZXJpZnkgdGhlIGFtb3VudCBvZiBpbmNvbWUgZWFybmVkIGluIHRoZSBmb3JlaWduIGNvdW50cnkuIFRoaXMgbWF5IGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcGF5IHN0dWJzLCBXLTIgZm9ybXMgZnJvbSBmb3JlaWduIGVtcGxveWVycywgb3IgYW55IG9mZmljaWFsIGluY29tZSBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgVGF4IFBhaWQ6PC9zdHJvbmc+IFRvIGNsYWltIHRoZSBGb3JlaWduIFRheCBDcmVkaXQsIGRvY3VtZW50YXRpb24gc2hvd2luZyB0aGUgYW1vdW50IG9mIHRheCBwYWlkIHRvIHRoZSBmb3JlaWduIGdvdmVybm1lbnQgaXMgcmVxdWlyZWQuIEFjY2VwdGFibGUgZm9ybXMgb2YgZXZpZGVuY2UgaW5jbHVkZSBmb3JlaWduIHRheCByZXR1cm4ocyksIHdpdGhob2xkaW5nIHN0YXRlbWVudHMsIG9yIGFueSBvZmZpY2lhbCB0YXggcmVjZWlwdHMgcHJvdmlkZWQgYnkgdGhlIGZvcmVpZ24gdGF4IGF1dGhvcml0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlcjo8L3N0cm9uZz4gWW91ciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIG9yIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciwgZm9yIGFjY3VyYXRlIHByb2Nlc3Npbmcgb2YgdGhlIHRheCBjcmVkaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBGb3JlaWduIFRheDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHR5cGUgb2YgdGF4IHBhaWQgdG8gdGhlIGZvcmVpZ24gY291bnRyeSAoaW5jb21lIHRheCwgc2FsZXMgdGF4LCBldGMuKSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgd2FzIGEgZmVkZXJhbCwgc3RhdGUvcHJvdmluY2lhbCwgb3IgbG9jYWwgdGF4LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmN5IChJZiBBcHBsaWNhYmxlKTo8L3N0cm9uZz4gSWYgeW91ciBjbGFpbSBkZXBlbmRzIG9uIHJlc2lkZW5jeSBzdGF0dXMgaW4gdGhlIGZvcmVpZ24gY291bnRyeSwgcGxlYXNlIHByb3ZpZGUgcHJvb2Ygb2YgcmVzaWRlbmN5IGZvciB0aGUgcmVsZXZhbnQgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JlaWduIEFkZHJlc3MgKElmIEFwcGxpY2FibGUpOjwvc3Ryb25nPiBJZiB5b3UgbWFpbnRhaW5lZCBhIHJlc2lkZW5jZSBvdXRzaWRlIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIHRoZSBhZGRyZXNzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgZW5zdXJpbmcgeW91ciB0YXggcmV0dXJucyBhcmUgYXMgYmVuZWZpY2lhbCB0byB5b3VyIHNpdHVhdGlvbiBhcyBhbGxvd2VkIGJ5IGxhdyBhbmQgZm9yIHByZXZlbnRpbmcgYW55IHVubmVjZXNzYXJ5IGRlbGF5cy48L3A+XHJcbiAgICA8cD5QbGVhc2UgdXBsb2FkIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gdG8gb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsIG9yIGVtYWlsIGl0IHRvIHVzIGF0IHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbSBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRyYWRpdGlvbmFsIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHlvdXIgaW5kaWNhdGlvbiBvZiBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgYmVuZWZpY2lhbCB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhYm91dCB5b3VyIFRyYWRpdGlvbmFsIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucyB5b3UgbWF5IGhhdmUgdGFrZW46PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMgdG8gYWNjdXJhdGVseSByZXBvcnQgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIHNwZWNpZnlpbmcgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZS48L2xpPlxyXG4gICAgICA8bGk+QW55IGRpc3RyaWJ1dGlvbnMgdGFrZW4gZnJvbSB5b3VyIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkFtb3VudCBvZiBlYWNoIGRpc3RyaWJ1dGlvbi48L2xpPlxyXG4gICAgICAgICAgPGxpPkRhdGVzIG9mIGVhY2ggZGlzdHJpYnV0aW9uLjwvbGk+XHJcbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIGZvciB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudCBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT5Bbnkgbm90aWNlcyByZWNlaXZlZCByZWdhcmRpbmcgbm9uLWRlZHVjdGlibGUgY29udHJpYnV0aW9ucywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHlvdXIgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIElSQSBjb250cmlidXRpb25zLCBhbmQgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5nLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjxwPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUm90aCBJUkEgQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHlvdXIgY29udHJpYnV0aW9ucyB0byBhIFJvdGggSVJBIGR1cmluZyB0aGUgbGFzdCB0YXggeWVhciBhcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgY2FwdHVyZSBhbGwgcmVsZXZhbnQgdGF4IGluZm9ybWF0aW9uIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNzIGFib3V0IHlvdXIgUm90aCBJUkEgY29udHJpYnV0aW9ucyBhbmQgYW55IGRpc3RyaWJ1dGlvbnM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgUm90aCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+VGhlIGRhdGVzIG9uIHdoaWNoIHRoZXNlIGNvbnRyaWJ1dGlvbnMgd2VyZSBtYWRlLjwvbGk+XHJcbiAgICAgIDxsaT5PZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gdGhhdCBkZXRhaWwgdGhlc2UgY29udHJpYnV0aW9ucy48L2xpPlxyXG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IGRpc3RyaWJ1dGlvbnMsIHNob3VsZCB0aGV5IGFwcGx5LCBpbmNsdWRpbmc6XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24gdGFrZW4gZnJvbSB0aGUgUm90aCBJUkEuPC9saT5cclxuICAgICAgICAgIDxsaT5UaGUgZGF0ZXMgb2YgdGhlc2UgZGlzdHJpYnV0aW9ucy48L2xpPlxyXG4gICAgICAgICAgPGxpPkRpc3RyaWJ1dGlvbiBzdGF0ZW1lbnRzIG9yIHJlbGV2YW50IGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4uPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+WW91ciB5ZWFyLWVuZCBhY2NvdW50IHN0YXRlbWVudCBmb3IgdGhlIFJvdGggSVJBIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgPGxpPkFueSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24gb3Igbm90aWNlcyByZWdhcmRpbmcgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIG9yIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyB0YXggcmVwb3J0aW5nIGZvcm1zIGxpa2UgRm9ybSA1NDk4IG9yIEZvcm0gMTA5OS1SLCBpZiByZWNlaXZlZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgb2YgeW91ciB0YXggc2l0dWF0aW9uLCBlbnN1cmluZyB0aGUgY29ycmVjdCB0cmVhdG1lbnQgb2YgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucywgYW5kIGNvbXBseWluZyB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVyaWVzIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UuPC9wPmBcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBBc3NldHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSdyZSBtYWtpbmcgcHJvZ3Jlc3Mgb24geW91ciB0YXggcmV0dXJuLCBhbmQgYmFzZWQgb24geW91ciByZXNwb25zZSBpbmRpY2F0aW5nIG93bmVyc2hpcCBvciBmaW5hbmNpYWwgaW50ZXJlc3QgaW4gZm9yZWlnbiBhc3NldHMsIGFkZGl0aW9uYWwgZGV0YWlscyBhcmUgbmVjZXNzYXJ5LiBUaGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCB0aGUgRm9yZWlnbiBBY2NvdW50IFRheCBDb21wbGlhbmNlIEFjdCAoRkFUQ0EpIGFuZCBSZXBvcnQgb2YgRm9yZWlnbiBCYW5rIGFuZCBGaW5hbmNpYWwgQWNjb3VudHMgKEZCQVIpIHJlcXVpcmVtZW50cy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BY2NvdW50IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbGwgc3RhdGVtZW50cyBmcm9tIGZvcmVpZ24gYmFua3MsIG11dHVhbCBmdW5kcywgb3Igc2VjdXJpdGllcyBhY2NvdW50cy4gVGhpcyBpbmNsdWRlcyBhbnl0aGluZyB3aXRoIGFuIGFnZ3JlZ2F0ZSB2YWx1ZSBvdmVyICQxMCwwMDAgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BY2NvdW50IE51bWJlcnM6PC9zdHJvbmc+IFRoZSBhY2NvdW50IG51bWJlcnMgZm9yIGFsbCBhcHBsaWNhYmxlIGFjY291bnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdGl0dXRpb24gTmFtZXM6PC9zdHJvbmc+IFRoZSBuYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb25zIHdoZXJlIHRoZXNlIGFjY291bnRzIGFyZSBoZWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWF4aW11bSBWYWx1ZXM6PC9zdHJvbmc+IFRoZSBtYXhpbXVtIHZhbHVlIG9mIGVhY2ggYWNjb3VudCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBjb252ZXJ0ZWQgdG8gVVNEIHVzaW5nIHRoZSBlbmQtb2YteWVhciBleGNoYW5nZSByYXRlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+T3duZXJzaGlwIERldGFpbHM6PC9zdHJvbmc+IENsYXJpZmljYXRpb24gb24gdGhlIHR5cGUgb2Ygb3duZXJzaGlwIChpbmRpdmlkdWFsLCBqb2ludCwgZXRjLikgYW5kIHRoZSBwZXJjZW50YWdlIG9mIG93bmVyc2hpcCBpZiBub3Qgc29sZWx5IG93bmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udGFjdCBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgbWFuYWdlZCBieSBhIGZpbmFuY2lhbCBhZHZpc29yIG9yIGluc3RpdHV0aW9uLCBwcm92aWRlIHRoZWlyIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgR2VuZXJhdGVkOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiBhbnkgaW5jb21lIGdlbmVyYXRlZCBmcm9tIHRoZXNlIGFzc2V0cywgc3VjaCBhcyBpbnRlcmVzdCwgZGl2aWRlbmRzLCBvciBjYXBpdGFsIGdhaW5zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBpbXBlcmF0aXZlIHRvIGVuc3VyZSBmdWxsIGNvbXBsaWFuY2UgYW5kIG1pdGlnYXRlIGFueSByaXNrcyBvZiBwZW5hbHRpZXMuIEtpbmRseSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBhbGxvdyBhbXBsZSB0aW1lIGZvciBwcm9wZXIgZmlsaW5nLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gVGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmBcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZ2lmdHMgb3IgYmVxdWVzdHMgZnJvbSBmb3JlaWduIGVudGl0aWVzIHRoYXQgZXhjZWVkIHRoZSAkMTAwLDAwMCB0aHJlc2hvbGQgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2Ugb24geW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tcGxldGUgbGlzdCBvZiBmb3JlaWduIGdpZnRzIG9yIGJlcXVlc3RzIHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBkZXRhaWxzIGZvciBlYWNoIGdpZnQgb3IgYmVxdWVzdCwgaW5jbHVkaW5nIHRoZSBkYXRlIHJlY2VpdmVkIGFuZCB0aGUgZXhhY3QgYW1vdW50IGluIFVTRCAoVS5TLiBEb2xsYXJzKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb25vciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggZ2lmdCByZWNlaXZlZCwgcHJvdmlkZSB0aGUgZG9ub3IncyBmdWxsIG5hbWUsIGFkZHJlc3MsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBHaWZ0Ojwvc3Ryb25nPiBEZXRhaWwgdGhlIHNvdXJjZSBvZiBlYWNoIGdpZnQsIGluY2x1ZGluZyB3aGV0aGVyIGl0IG9yaWdpbmF0ZWQgZnJvbSBhbiBpbmRpdmlkdWFsLCBlc3RhdGUsIGZvcmVpZ24gY29ycG9yYXRpb24sIG9yIHBhcnRuZXJzaGlwLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQ291bnRyeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY291bnRyeSBmcm9tIHdoaWNoIGVhY2ggZ2lmdCBvciBiZXF1ZXN0IHdhcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBiYW5rIHN0YXRlbWVudHMsIGZvcmVpZ24gZ2lmdCBkZWNsYXJhdGlvbiBmb3Jtcywgb3IgbGVnYWwgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHJlY2VpcHQgb2YgdGhlc2UgZ2lmdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gZnVsZmlsbCBvdXIgb2JsaWdhdGlvbnMgYW5kIGVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncy4gRmFpbHVyZSB0byByZXBvcnQgZm9yZWlnbiBnaWZ0cyBvciBiZXF1ZXN0cyBhY2N1cmF0ZWx5IGNhbiByZXN1bHQgaW4gcGVuYWx0aWVzLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRlcHJlY2lhYmxlIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgd2UgYmVnaW4gcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiwgd2UgbmVlZCB5b3VyIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgZGVwcmVjaWFibGUgYXNzZXRzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBkZXByZWNpYXRpb24gZXhwZW5zZSBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucy48L3A+XHJcblxyXG4gICAgPGgyPkFjdGlvbiBJdGVtOjwvaDI+XHJcbiAgICA8cD5QbGVhc2UgYWNjZXNzIHlvdXIgPHN0cm9uZz5zZWN1cmUgY2xpZW50IHVwbG9hZCBwb3J0YWw8L3N0cm9uZz4gYW5kIG5hdmlnYXRlIHRvIHRoZSBmb2xsb3dpbmcgcGF0aDogPGNvZGU+dGF4ZXMvW0NVUlJFTlQgVEFYIFlFQVJdL0RlcHJlY2lhdGlvbi9Bc3NldHMueGxzeDwvY29kZT4uIFlvdSB3aWxsIGZpbmQgYSBzcHJlYWRzaGVldCB0aXRsZWQgXCI8c3Ryb25nPkRlcHJlY2lhYmxlIEFzc2V0czwvc3Ryb25nPi5cIiBXZSBraW5kbHkgcmVxdWVzdCB0aGF0IHlvdSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVwcmVjaWFibGUgYXNzZXQgaW4geW91ciBidXNpbmVzczo8L3A+XHJcbiAgICA8dWw+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb246PC9zdHJvbmc+IFByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiB0aGF0IGNsZWFybHkgaWRlbnRpZmllcyB0aGUgYXNzZXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIEFjcXVpcmVkOjwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkYXRlIHlvdSBwdXJjaGFzZWQgb3IgYWNxdWlyZWQgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCAvIEJhc2lzOjwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgb3JpZ2luYWwgY29zdCBvZiB0aGUgYXNzZXQgb3IgdGhlIGFkanVzdGVkIGJhc2lzIGlmIGRlcHJlY2lhdGlvbiBoYXMgYmVlbiBjbGFpbWVkIGluIHByZXZpb3VzIHllYXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QnVzaW5lc3MgJSBVc2U6PC9zdHJvbmc+IEVzdGltYXRlIHRoZSBwZXJjZW50YWdlIG9mIHRpbWUgdGhlIGFzc2V0IGlzIHVzZWQgZm9yIGJ1c2luZXNzIHB1cnBvc2VzIHZlcnN1cyBwZXJzb25hbCB1c2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Vc2VkIFByb3BlcnR5Ojwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBhc3NldCB3YXMgcHVyY2hhc2VkIG5ldyBvciB1c2VkLjwvbGk+XHJcbiAgICA8L3VsPlxyXG5cclxuICAgIDxoMz5JbXBvcnRhbnQgTm90ZSBvbiBTYWZlLUhhcmJvciBFeHBlbnNpbmc6PC9oMz5cclxuICAgIDxwPlBsZWFzZSBiZSBhd2FyZSB0aGF0IHVuZGVyIHRoZSBzYWZlLWhhcmJvciA8ZW0+ZGUgbWluaW1pczwvZW0+IGV4cGVuc2luZyBydWxlLCB5b3UgY2FuIGltbWVkaWF0ZWx5IGV4cGVuc2UgdGhlIGNvc3Qgb2YgYW55IGluZGl2aWR1YWwgYXNzZXQgdGhhdCBjb3N0cyBsZXNzIHRoYW4gJDIsNTAwLCBwcm92aWRlZCB5b3UgZG8gbm90IGhhdmUgYW4gQXBwbGljYWJsZSBGaW5hbmNpYWwgU3RhdGVtZW50IChBRlMpLiBJZiBhbiBhc3NldCBtZWV0cyB0aGlzIGNyaXRlcmlvbiwgeW91IGRvIG5vdCBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHNwcmVhZHNoZWV0LjwvcD5cclxuXHJcbiAgICA8cD5XZSBlbmNvdXJhZ2UgeW91IHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUgd2hlbiBsaXN0aW5nIHlvdXIgYXNzZXRzLiBJZiB5b3UgYXJlIHVuc3VyZSB3aGV0aGVyIGFuIGl0ZW0gc2hvdWxkIGJlIGluY2x1ZGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZGV0YWlscywgYW5kIHdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSB0cmVhdG1lbnQuPC9wPlxyXG5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gPHN0cm9uZz5jb250YWN0IHVzPC9zdHJvbmc+LiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIHdvcmtpbmcgd2l0aCB5b3UgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybi48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXNzaXZlIEJ1c2luZXNzIEFjdGl2aXRpZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+SW4gb3JkZXIgdG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXNzaXZlIGFjdGl2aXRpZXMgeW91ciBidXNpbmVzcyBpcyBlbmdhZ2VkIGluLiBQYXNzaXZlIGFjdGl2aXRpZXMgZ2VuZXJhbGx5IGludm9sdmUgYnVzaW5lc3Mgb3IgdHJhZGUgYWN0aXZpdGllcyBpbiB3aGljaCB5b3UgZG8gbm90IG1hdGVyaWFsbHkgcGFydGljaXBhdGUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgYWN0aXZpdGllcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgdGF4IHJlcG9ydGluZyBhbmQgcG90ZW50aWFsIHRheCBiZW5lZml0cy48L3A+XHJcblxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpZiB5b3UgYmVsaWV2ZSB3ZSBkbyBub3QgYWxyZWFkeSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiB5b3VyIGJ1c2luZXNzIGZpbmFuY2lhbHM6PC9wPlxyXG4gICAgXHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPk5hbWVzIGFuZCBEZXNjcmlwdGlvbnM6PC9zdHJvbmc+IEEgbGlzdCBhbmQgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwYXNzaXZlIGFjdGl2aXR5IHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5GaW5hbmNpYWwgU3RhdGVtZW50czo8L3N0cm9uZz5JZiBub3QgYWxyZWFkeSBpbiB5b3VyIGJ1c2luZXNzIGZpbmFuY2lhbHMsIFByb2ZpdCBhbmQgbG9zcyBzdGF0ZW1lbnRzIGZvciBlYWNoIHBhc3NpdmUgYWN0aXZpdHksIGRldGFpbGluZyBpbmNvbWUgYW5kIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk93bmVyc2hpcCBTdHJ1Y3R1cmU6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb3V0bGluaW5nIHlvdXIgb3duZXJzaGlwIGludGVyZXN0IGluIGVhY2ggYWN0aXZpdHksIGluY2x1ZGluZyBhbnkgam9pbnQgdmVudHVyZXMgb3IgcGFydG5lcnNoaXBzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBQcm9wZXJ0aWVzIChpZiBhcHBsaWNhYmxlKTo8L3N0cm9uZz4gSWYgYW55IHBhc3NpdmUgYWN0aXZpdGllcyBpbmNsdWRlIHJlbnRhbCBwcm9wZXJ0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzc2VzLCBsZWFzZSBhZ3JlZW1lbnRzLCBhbmQgYSBzY2hlZHVsZSBvZiByZW50cyBjb2xsZWN0ZWQgYW5kIGV4cGVuc2VzIGluY3VycmVkLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkxvZyBvZiBQZXJzb25hbCBJbnZvbHZlbWVudDo8L3N0cm9uZz4gRm9yIGVhY2ggYWN0aXZpdHksIGEgbG9nIG9yIHJlY29yZCBvZiB5b3VyIHBlcnNvbmFsIGludm9sdmVtZW50IG9yIHBhcnRpY2lwYXRpb24gb3ZlciB0aGUgdGF4IHllYXIsIHRvIHN1YnN0YW50aWF0ZSB0aGUgZXh0ZW50IG9mIHlvdXIgbWF0ZXJpYWwgcGFydGljaXBhdGlvbi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmlvciBZZWFyIExvc3Nlczo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gYW55IGxvc3NlcyBmcm9tIHRoZXNlIGFjdGl2aXRpZXMgY2FycmllZCBvdmVyIGZyb20gcHJldmlvdXMgdGF4IHllYXJzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgXHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHBpdm90YWwgZm9yIGFzc2Vzc2luZyB5b3VyIHBhc3NpdmUgYWN0aXZpdHkgbG9zc2VzIGFuZCBjb3JyZWN0bHkgYXBwbHlpbmcgdGhlbSBhZ2FpbnN0IHlvdXIgcGFzc2l2ZSBhY3Rpdml0eSBpbmNvbWUsIGluIGxpbmUgd2l0aCB0aGUgSVJTIHBhc3NpdmUgYWN0aXZpdHkgbG9zcyBydWxlcy48L3A+XHJcbiAgICBcclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmBcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBleHBsb3Jpbmcgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyB0aHJvdWdoIHZhcmlvdXMgZ2VuZXJhbCBidXNpbmVzcyBjcmVkaXRzLiBUaGVzZSBjcmVkaXRzIGFyZSBkZXNpZ25lZCB0byBlbmNvdXJhZ2UgY2VydGFpbiBidXNpbmVzcyBhY3Rpdml0aWVzIHRoYXQgbWVldCB0aGUgZ29hbHMgYW5kIHBvbGljaWVzIGVzdGFibGlzaGVkIGJ5IHRoZSBnb3Zlcm5tZW50LCByYW5naW5nIGZyb20gaW52ZXN0bWVudCBpbiBwcm9wZXJ0eSB0byBmb3N0ZXJpbmcgc29jaWFsIHJlc3BvbnNpYmlsaXRpZXMgbGlrZSBlbXBsb3ltZW50IG9wcG9ydHVuaXRpZXMgZm9yIHZldGVyYW5zLiBVbmRlcnN0YW5kaW5nIHdoZXRoZXIgeW91ciBidXNpbmVzcyBpcyBlbGlnaWJsZSBmb3IgdGhlc2UgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHlvdXIgZmluYW5jaWFscyBmYXZvcmFibHkuPC9wPlxyXG5cclxuICAgIDxwPkJlbG93IGlzIGEgYnJpZWYgZXhwbGFuYXRpb24gb2Ygc29tZSBvZiB0aGUgbW9zdCBjb21tb24gR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzIGFuZCBvdGhlcnMgdGhhdCBtaWdodCBhcHBseSB0byB5b3VyIHNpdHVhdGlvbjo8L3A+XHJcbiAgICBcclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBDcmVkaXQgKEZvcm0gMzQ2OCk6PC9zdHJvbmc+IEZvciBpbnZlc3RpbmcgaW4gY2VydGFpbiBwcm9wZXJ0eSBsaWtlIGJ1aWxkaW5ncywgZXF1aXBtZW50LCBvciBvdGhlciB0YW5naWJsZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Xb3JrIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgKEZvcm0gNTg4NCk6PC9zdHJvbmc+IEZvciBoaXJpbmcgaW5kaXZpZHVhbHMgZnJvbSBjZXJ0YWluIHRhcmdldCBncm91cHMgd2hvIGhhdmUgY29uc2lzdGVudGx5IGZhY2VkIHNpZ25pZmljYW50IGJhcnJpZXJzIHRvIGVtcGxveW1lbnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGlzYWJsZWQgQWNjZXNzIENyZWRpdDo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBpbmN1cnJlZCBleHBlbnNlcyBmb3IgbWFraW5nIGl0IG1vcmUgYWNjZXNzaWJsZSB0byBpbmRpdmlkdWFscyB3aXRoIGRpc2FiaWxpdGllcywgY29tcGx5aW5nIHdpdGggdGhlIEFtZXJpY2FucyB3aXRoIERpc2FiaWxpdGllcyBBY3QgKEFEQSkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIFRheGVzIG9uIEVtcGxveWVlIFRpcHMgKEZvcm0gODg0Nik6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGVtcGxveWVlcyB3aG8gcmVjZWl2ZSB0aXBzLCB0aGlzIGNyZWRpdCByZWxhdGVzIHRvIHRoZSBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheGVzIHlvdSBwYXkgb24gdGhvc2UgdGlwcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBDcmVkaXQgZm9yIFBhaWQgRmFtaWx5IGFuZCBNZWRpY2FsIExlYXZlIChGTUxBIExlYXZlKSAoRm9ybSA4OTk0KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgcHJvdmlkaW5nIHBhaWQgZmFtaWx5IGFuZCBtZWRpY2FsIGxlYXZlIHRvIHRoZWlyIGVtcGxveWVlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIFNtYWxsIEVtcGxveWVyIEhlYWx0aCBJbnN1cmFuY2UgUHJlbWl1bXMgKEZvcm0gODk0MSk6PC9zdHJvbmc+IElmIHlvdSBwcm92aWRlIGhlYWx0aCBpbnN1cmFuY2UgdG8geW91ciBlbXBsb3llZXMsIHlvdSBtaWdodCBiZSBlbGlnaWJsZSBmb3IgdGhpcyBjcmVkaXQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzZWFyY2ggYW5kIERldmVsb3BtZW50IENyZWRpdCAoRm9ybSA2NzY1KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgZW5nYWdpbmcgaW4gcXVhbGlmaWVkIHJlc2VhcmNoIGFjdGl2aXRpZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llci1Qcm92aWRlZCBDaGlsZCBDYXJlIEZhY2lsaXRpZXMgYW5kIFNlcnZpY2VzOjwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIHByb3ZpZGVzIGNoaWxkIGNhcmUgZmFjaWxpdGllcyBvciBzZXJ2aWNlcyB0byB5b3VyIGVtcGxveWVlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIFNtYWxsIEVtcGxveWVyIFBlbnNpb24gUGxhbiBTdGFydHVwIENvc3RzIGFuZCBBdXRvLUVucm9sbG1lbnQgKEZvcm0gODg4MSk6PC9zdHJvbmc+IElmIHlvdXIgYnVzaW5lc3MgaGFzIHNldCB1cCBvciBwbGFucyB0byBzZXQgdXAgYSBwZW5zaW9uIHBsYW4gZm9yIHlvdXIgZW1wbG95ZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk90aGVyIGNyZWRpdHM6PC9zdHJvbmc+IEFkZGl0aW9uYWwgY3JlZGl0cyBjYW4gYmUgZm91bmQgaW4gZGV0YWlsIGF0IDxhIGhyZWY9XCJodHRwczovL3d3dy5pcnMuZ292L2luc3RydWN0aW9ucy9pMzgwMFwiPklSUyBJbnN0cnVjdGlvbnMgZm9yIEZvcm0gMzgwMDwvYT4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICBcclxuICAgIDxwPldlIHdvdWxkIGxpa2UgdG8gYXNzZXNzIHlvdXIgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGVzZSBjcmVkaXRzLiBQbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGFuZCA8c3Ryb25nPmluZm9ybSB1cyBpZiB5b3UgYmVsaWV2ZSB5b3VyIGJ1c2luZXNzIG1heSBxdWFsaWZ5PC9zdHJvbmc+IGZvciBhbnkgb2YgdGhlbSBiYXNlZCBvbiB5b3VyIGN1cnJlbnQgb3BlcmF0aW9ucyBvciBmdXR1cmUgcGxhbnMuIEFkZGl0aW9uYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcmVkaXRzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYXBwbHkgdG8geW91ciBidXNpbmVzcywgbGV0IHVzIGtub3cuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5Zb3VyIGluc2lnaHRzIHdpbGwgZ3JlYXRseSBhc3Npc3QgdXMgaW4gZW5zdXJpbmcgd2UgZXhwbG9yZSBhbGwgYXZlbnVlcyB0byByZWR1Y2UgeW91ciB0YXggbGlhYmlsaXR5IGFuZCBjYXBpdGFsaXplIG9uIGF2YWlsYWJsZSBjcmVkaXRzLjwvcD5cclxuICAgIFxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZXNlIGNyZWRpdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+YFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCdXNpbmVzcyBBc3NldHMgU29sZFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIHdvcmsgdG8gZGlsaWdlbnRseSBwcmVwYXJlIHlvdXIgYnVzaW5lc3PigJlzIHRheCBkb2N1bWVudGF0aW9uLCB3ZSBuZWVkIHRvIGVuc3VyZSBjb21wbGV0ZW5lc3MgYW5kIGFjY3VyYWN5IGluIHJlcG9ydGluZyBhbGwgcmVsZXZhbnQgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIHRheCB5ZWFyLiBBbiBpbXBvcnRhbnQgYXJlYSBvZiBmb2N1cyBpcyB0aGUgc2FsZSBvZiBhbnkgYnVzaW5lc3MgYXNzZXRzLiBUaGlzIGluY2x1ZGVzIGJvdGggYXNzZXRzIGFjdGl2ZWx5IGluIHVzZSBhbmQgdGhvc2UgdGhhdCBoYXZlIGJlZW4gcHJldmlvdXNseSBkZXByZWNpYXRlZC48L3A+XHJcblxyXG4gICAgPHA+VGhlIHNhbGUgb2YgYnVzaW5lc3MgYXNzZXRzIGNhbiBoYXZlIHNpZ25pZmljYW50IHRheCBpbXBsaWNhdGlvbnMsIGluY2x1ZGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMsIHJlY2FwdHVyZSBvZiBkZXByZWNpYXRpb24sIGFuZCBpbXBhY3RzIG9uIHlvdXIgYnVzaW5lc3PigJlzIGNhc2ggZmxvdyBhbmQgZmluYW5jaWFsIHN0YXRlbWVudHMuIEFjY29yZGluZ2x5LCBpdCBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gdGhlIElSUy48L3A+XHJcbiAgICBcclxuICAgIDxwPlBsZWFzZSBjb25maXJtIGlmIHlvdXIgYnVzaW5lc3MgaGFzIHNvbGQgYW55IGFzc2V0cyBkdXJpbmcgdGhlIGN1cnJlbnQgdGF4IHBlcmlvZCBieSBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICBcclxuICAgIDx1bD5cclxuICAgICAgPGxpPjxzdHJvbmc+QXNzZXQgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBhc3NldCBzb2xkIChlLmcuLCBlcXVpcG1lbnQsIHByb3BlcnR5LCB2ZWhpY2xlcykuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJvY2VlZHM6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgbW9uZXkgcmVjZWl2ZWQgZnJvbSB0aGUgc2FsZSBvZiBlYWNoIGFzc2V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk9yaWdpbmFsIFB1cmNoYXNlIFByaWNlIGFuZCBEYXRlOjwvc3Ryb25nPiBUaGUgb3JpZ2luYWwgcHVyY2hhc2UgcHJpY2UgYW5kIHB1cmNoYXNlIGRhdGUgZm9yIGVhY2ggYXNzZXQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QWNjdW11bGF0ZWQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBUaGUgdG90YWwgZGVwcmVjaWF0aW9uIGNsYWltZWQgb24gZWFjaCBhc3NldCB1cCB0byB0aGUgcG9pbnQgb2Ygc2FsZS48L2xpPlxyXG4gICAgPC91bD5cclxuICAgIFxyXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHNvbGQgYW55IGJ1c2luZXNzIGFzc2V0cyBkdXJpbmcgdGhpcyBwZXJpb2QsIHBsZWFzZSBjb25maXJtIHRoaXMgYXMgd2VsbC4gWW91ciB0aW1lbHkgcmVzcG9uc2UgdG8gdGhpcyBpbnF1aXJ5IGlzIGNydWNpYWwgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICBcclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YFxyXG4gIH0sXHJcbl07XHJcbiJdfQ==
2221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JB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UUFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7UUFDNUMsV0FBVyxFQUFFLDBCQUEwQjtRQUN2QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dMQXFCd0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBa0J1QztLQUM1RDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQWN0aW9uVGF4RnJhZ21lbnRzID0gW1xyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpb3IgWWVhciBUYXggUmV0dXJuc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IGBQcm92aWRlIFByaW9yIFllYXIgVGF4IFJldHVybnNgLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCByZXF1aXJlIHlvdXIgYXNzaXN0YW5jZSB0byBlbnN1cmUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcy4gT25lIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHdlIG5lZWQgaXMgeW91ciA8c3Ryb25nPlByaW9yIFllYXIgVGF4IFJldHVybnM8L3N0cm9uZz4uIFRoaXMgZG9jdW1lbnQgaXMgZXNzZW50aWFsIGZvciBzZXZlcmFsIHJlYXNvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHZlcmlmeWluZyBjYXJyeS1mb3J3YXJkIGFtb3VudHMsIGNvbXBhcmluZyB5ZWFyLW92ZXIteWVhciBpbmNvbWUgYW5kIGRlZHVjdGlvbnMsIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxyXG4gICAgPHA+VG8gZmFjaWxpdGF0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiB5b3VyIDxzdHJvbmc+RmVkZXJhbCB0YXggcmV0dXJuPC9zdHJvbmc+IGZvciB0aGUgbGFzdCB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPlN0YXRlIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSA8c3Ryb25nPm5vdGljZXMgb3IgYW1lbmRtZW50czwvc3Ryb25nPiByZWxhdGVkIHRvIHlvdXIgcHJpb3IgeWVhciB0YXggcmV0dXJucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBkaWZmaWN1bHR5IGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBsZXQgdXMga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIGNhbiBkaXNjdXNzIGFsdGVybmF0aXZlIHNvbHV0aW9ucy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFByb3ZpZGluZyB0aGVzZSB3aWxsIGVuYWJsZSB1cyB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiB3aXRob3V0IGRlbGF5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdGF0dXRvcnkgRXh0ZW5zaW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IGBEZXRlcm1pbmluZyBFbGlnaWJpbGl0eSBmb3IgU3RhdHV0b3J5IEZpbGluZyBFeHRlbnNpb25zYCxcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB5b3UgcXVhbGlmeSBmb3Igc3RhdHV0b3J5IGZpbGluZyBleHRlbnNpb25zIGZvciB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2Ugc2VlIGJlbG93IHRoZSBjYXRlZ29yaWVzIG9mIGluZm9ybWF0aW9uIG5lZWRlZCBiYXNlZCBvbiBkaWZmZXJlbnQgZWxpZ2liaWxpdHkgY3JpdGVyaWE6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZlZGVyYWwgRGlzYXN0ZXIgQXJlYXM8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBvZiB5b3VyIHByaW1hcnkgcmVzaWRlbmNlIGxvY2F0aW9uIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBjb3JyZXNwb25kZW5jZSByZWNlaXZlZCByZWdhcmRpbmcgZGlzYXN0ZXIgZGVjbGFyYXRpb25zIGluIHlvdXIgYXJlYS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TGl2aW5nIEFicm9hZDwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+UHJvb2Ygb2YgcmVzaWRlbmNlIG91dHNpZGUgdGhlIFVuaXRlZCBTdGF0ZXMgZm9yIG1vcmUgdGhhbiAzMzAgZnVsbCBkYXlzIHdpdGhpbiBhIDEyLW1vbnRoIHBlcmlvZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB5b3VyIHBoeXNpY2FsIHByZXNlbmNlIG9yIGJvbmEgZmlkZSByZXNpZGVuY2UgaW4gYSBmb3JlaWduIGNvdW50cnkuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjdGl2ZSBNaWxpdGFyeTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBpbmRpY2F0aW5nIGFjdGl2ZSBkdXR5IHN0YXR1cywgaW5jbHVkaW5nIGRhdGVzIG9mIHNlcnZpY2Ugd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIG9yZGVycyBmb3Igb3ZlcnNlYXMgZGVwbG95bWVudC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29tYmF0IFpvbmU8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk9mZmljaWFsIG9yZGVycyBkZW1vbnN0cmF0aW5nIHlvdXIgZGVwbG95bWVudCB0byBhIGNvbWJhdCB6b25lLCBpbmNsdWRpbmcgdGhlIHNwZWNpZmljIGRhdGVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IHJlbGV2YW50IGNvbW11bmljYXRpb24gZnJvbSB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIG9yIG90aGVyIG9mZmljaWFsIGJvZGllcyByZWdhcmRpbmcgeW91ciBzZXJ2aWNlIGluIGEgY29tYmF0IHpvbmUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwZW5kZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVxdWVzdCBmb3IgRGVwZW5kZW50IEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgbmVlZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGRlcGVuZGVudHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYXBwbHlpbmcgdGhlIG1vc3QgYmVuZWZpY2lhbCBkZXBlbmRlbmN5IHRlc3RzLCBpbmNsdWRpbmcgcXVhbGlmaWNhdGlvbnMgZm9yIEhlYWQgb2YgSG91c2Vob2xkIChIT0gpLCBDaGlsZCBUYXggQ3JlZGl0LCBhbmQgb3RoZXIgcmVsYXRlZCBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIG9mIHlvdXIgY2xhaW1lZCBkZXBlbmRlbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GdWxsIE5hbWU6PC9zdHJvbmc+IFRoZSBjb21wbGV0ZSBsZWdhbCBuYW1lIG9mIHRoZSBkZXBlbmRlbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9yIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoVElOKTo8L3N0cm9uZz4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBCaXJ0aDo8L3N0cm9uZz4gSGVscHMgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBjZXJ0YWluIGNyZWRpdHMgbGlrZSB0aGUgQ2hpbGQgVGF4IENyZWRpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbGF0aW9uc2hpcCB0byBZb3U6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRlcGVuZGVudCdzIHJlbGF0aW9uc2hpcCAoc29uLCBkYXVnaHRlciwgc3RlcGNoaWxkLCBmb3N0ZXIgY2hpbGQsIGJyb3RoZXIsIHNpc3RlciwgZXRjLikgdG8geW91LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVzaWRlbmN5Ojwvc3Ryb25nPiBDb25maXJtIHRoZSBkZXBlbmRlbnQgbGl2ZWQgd2l0aCB5b3UgZm9yIG1vcmUgdGhhbiBoYWxmIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN1cHBvcnQ6PC9zdHJvbmc+IENvbmZpcm0geW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBkZXBlbmRlbnTigJlzIGZpbmFuY2lhbCBzdXBwb3J0IGZvciB0aGUgeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNpdGl6ZW5zaGlwOjwvc3Ryb25nPiBDb25maXJtIHRoZSBkZXBlbmRlbnQgaXMgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGUgZGVwZW5kZW50IGlzIG1hcnJpZWQgYW5kLCBpZiBzbywgd2hldGhlciB0aGV5IGFyZSBmaWxpbmcgam9pbnRseS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgaW5jb21lIHRoZSBkZXBlbmRlbnQgbWF5IGhhdmUgZWFybmVkIG9yIHJlY2VpdmVkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3UgcHJvdmlkZSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgaW5mb3JtYXRpb24gdG8gYXZvaWQgYW55IGRlbGF5cyBpbiB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSGVhZCBvZiBIb3VzZWhvbGRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkhlYWQgb2YgSG91c2Vob2xkIEZpbGluZ1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBjb21wbGlhbnQgdGF4IGZpbGluZyB1bmRlciB0aGUgXCJIZWFkIG9mIEhvdXNlaG9sZFwiIHN0YXR1cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4gVGhpcyBzdGF0dXMgY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IGJlbmVmaXRzLCBhbmQgaXQgaXMgY3J1Y2lhbCB0aGF0IGFsbCBJUlMgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIFBsZWFzZSBwcm92aWRlOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBDb25maXJtYXRpb24gb2YgeW91ciBtYXJpdGFsIHN0YXR1cyBhcyBvZiB0aGUgbGFzdCBkYXkgb2YgdGhlIHRheCB5ZWFyIChlLmcuLCBzaW5nbGUsIGRpdm9yY2VkLCBsZWdhbGx5IHNlcGFyYXRlZCkuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkhvdXNlaG9sZCBFeHBlbnNlczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBpbmRpY2F0aW5nIHRoYXQgeW91IHBhaWQgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGNvc3RzIG9mIGtlZXBpbmcgdXAgYSBob21lIGZvciB0aGUgdGF4IHllYXIuIFRoaXMgaW5jbHVkZXMgcmVudCwgbW9ydGdhZ2UgaW50ZXJlc3QsIHByb3BlcnR5IHRheGVzLCB1dGlsaXRpZXMsIHJlcGFpcnMsIG1haW50ZW5hbmNlLCBhbmQgZ3JvY2VyaWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5RdWFsaWZ5aW5nIFBlcnNvbjo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHF1YWxpZnlpbmcgcGVyc29uKHMpIHdobyBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgaG9tZSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHllYXIsIGV4Y2VwdCBmb3IgdGVtcG9yYXJ5IGFic2VuY2VzIHN1Y2ggYXMgc2Nob29sLiBQbGVhc2UgaW5jbHVkZTpcclxuICAgICAgPHVsPlxyXG4gICAgICA8bGk+RnVsbCBuYW1lIGFuZCByZWxhdGlvbnNoaXAgdG8geW91IChlLmcuLCBjaGlsZCwgcGFyZW50LCBzaWJsaW5nKS48L2xpPlxyXG4gICAgICA8bGk+RHVyYXRpb24gb2YgcmVzaWRlbmN5IGF0IHlvdXIgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5TdXBwb3J0aW5nIGRvY3VtZW50cyAoYmlydGggY2VydGlmaWNhdGVzLCBzY2hvb2wgcmVjb3JkcywgZXRjLikgcHJvdmluZyB0aGUgcmVzaWRlbmN5IGFuZCByZWxhdGlvbnNoaXAuPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIFN1cHBvcnQ6PC9zdHJvbmc+IEFueSBmdXJ0aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB5b3VyIGNsYWltIGZvciB0aGUgSGVhZCBvZiBIb3VzZWhvbGQgZmlsaW5nIHN0YXR1cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgcHJvdmlkaW5nIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIHlvdXIgYmVuZWZpdCBhbmQgdG8gY29tcGx5IHdpdGggdGF4IGxhd3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlc2lkZW5jeSBTdGF0dXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkluZm9ybWF0aW9uIG9uIFJlc2lkZW5jeSBTdGF0dXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCBlaXRoZXIgeW91IG9yIHlvdXIgc3BvdXNlIGlzIG5vdCBhIFUuUy4gY2l0aXplbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgeW91ciB0YXggc3RhdHVzLCB3ZSBuZWVkIHRvIGFwcGx5IHRoZSBuZWNlc3NhcnkgVGF4IFJlc2lkZW5jeSBUZXN0cywgd2hpY2ggaW5jbHVkZSB0aGUgPHN0cm9uZz5HcmVlbiBDYXJkIFRlc3Q8L3N0cm9uZz4gYW5kIHRoZSA8c3Ryb25nPlN1YnN0YW50aWFsIFByZXNlbmNlIFRlc3Q8L3N0cm9uZz4uIFRoaXMgd2lsbCBoZWxwIHVzIGVuc3VyZSB5b3VyIHRheCByZXR1cm5zIGFyZSBjb21wbGV0ZWQgY29ycmVjdGx5IGFuZCBjb21wbHkgd2l0aCBVLlMuIHJlZ3VsYXRpb25zLjwvcD5cclxuXHJcbiAgICA8cD5UbyBwcm9jZWVkLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkdyZWVuIENhcmQgU3RhdHVzOjwvc3Ryb25nPiBQbGVhc2UgY29uZmlybSBpZiB5b3Ugb3IgeW91ciBzcG91c2UgaGF2ZSBiZWVuIGlzc3VlZCBhIFUuUy4gZ3JlZW4gY2FyZCAoTGF3ZnVsIFBlcm1hbmVudCBSZXNpZGVudCBDYXJkKSBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci4gSWYgeWVzLCBwcm92aWRlIGEgY29weSBvZiB0aGUgZ3JlZW4gY2FyZCBvciB0aGUgb2ZmaWNpYWwgZG9jdW1lbnQgY29uZmlybWluZyB0aGUgc3RhdHVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBBcnJpdmFsIGluIHRoZSBVLlMuOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZXMgd2hlbiB5b3UgYW5kL29yIHlvdXIgc3BvdXNlIGZpcnN0IGFycml2ZWQgaW4gdGhlIFUuUy4gZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRyYXZlbCBIaXN0b3J5Ojwvc3Ryb25nPiBBIGRldGFpbGVkIGxpc3Qgb2YgYWxsIHRoZSBkYXRlcyB5b3UgYW5kL29yIHlvdXIgc3BvdXNlIGVudGVyZWQgYW5kIGxlZnQgdGhlIFUuUy4gZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgU3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlZpc2EgVHlwZTo8L3N0cm9uZz4gSWYgeW91IG9yIHlvdXIgc3BvdXNlIGFyZSBvbiBhIHZpc2EsIHBsZWFzZSBzcGVjaWZ5IHRoZSB0eXBlIGFuZCBwcm92aWRlIGEgY29weSBvZiB0aGUgdmlzYS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXIgVGF4IEZpbGluZ3M6PC9zdHJvbmc+IENvcGllcyBvZiBsYXN0IHllYXIncyB0YXggcmV0dXJucywgaWYgYXBwbGljYWJsZS4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gcHJvdmlkZSBjb250ZXh0IGFuZCBoZWxwIGRldGVybWluZSByZXNpZGVuY3kgc3RhdHVzIG1vcmUgYWNjdXJhdGVseS48L2xpPlxyXG4gICAgPC9vbD5cclxuXHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBZb3UgY2FuIHNlbmQgdGhlbSB0byB1cyB2aWEgZW1haWwgb3IgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuIEZvciBhbnkgcXVlc3Rpb25zIG9yIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuXHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3Ugd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSm9pbnQgVGF4IFJlbGllZlwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSm9pbnQgVGF4IFJlbGllZiBEZXRhaWxzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBhc3Npc3QgeW91IGVmZmVjdGl2ZWx5IHdpdGggeW91ciByZXF1ZXN0IGZvciBqb2ludCB0YXggcmVsaWVmLCB3ZSBuZWVkIHRvIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB5b3VyIHNpdHVhdGlvbiB0aG9yb3VnaGx5LiBUaGlzIHdpbGwgaGVscCB1cyBkZXRlcm1pbmUgdGhlIG1vc3Qgc3VpdGFibGUgdHlwZSBvZiByZWxpZWYgZm9yIHlvdXIgY2lyY3Vtc3RhbmNlcywgd2hpY2ggbWF5IGluY2x1ZGUgSW5ub2NlbnQgU3BvdXNlIFJlbGllZiwgSW5qdXJlZCBTcG91c2UgQWxsb2NhdGlvbiwgU2VwYXJhdGlvbiBvZiBMaWFiaWxpdHkgUmVsaWVmLCBvciBFcXVpdGFibGUgUmVsaWVmLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbXBsZXRlIFRheCBSZXR1cm5zOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIHRheCByZXR1cm5zIGZvciB0aGUgeWVhcnMgeW91IGFyZSByZXF1ZXN0aW5nIHJlbGllZi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgd3JpdHRlbiBzdGF0ZW1lbnQgZXhwbGFpbmluZyB3aHkgeW91IGJlbGlldmUgeW91IHF1YWxpZnkgZm9yIHJlbGllZiwgaW5jbHVkaW5nIGFueSBzcGVjaWZpYyBldmVudHMgb3IgY2lyY3Vtc3RhbmNlcyB5b3Ugd2FudCB1cyB0byBjb25zaWRlci48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUHJvb2Ygb2YgeW91ciBjdXJyZW50IGluY29tZSBhbmQgdGhhdCBvZiB5b3VyIHNwb3VzZSBpZiBhcHBsaWNhYmxlLCBzdWNoIGFzIHJlY2VudCBwYXkgc3R1YnMsIFctMiBmb3Jtcywgb3Igb3RoZXIgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgRmluYW5jaWFsIFNpdHVhdGlvbjo8L3N0cm9uZz4gRG9jdW1lbnRzIHNob3dpbmcgeW91ciBjdXJyZW50IGZpbmFuY2lhbCBzaXR1YXRpb24sIGluY2x1ZGluZyBiYW5rIHN0YXRlbWVudHMsIG1vbnRobHkgYmlsbHMsIGFuZCBhbnkgb3RoZXIgbGlhYmlsaXRpZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBNYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgbGVnYWwgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gc2VwYXJhdGlvbiwgZGl2b3JjZSwgb3IgYW5udWxtZW50LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHRoYXQgcHJvdmUgd2hlcmUgZWFjaCBvZiB5b3UgaGFzIGxpdmVkIGR1cmluZyB0aGUgdGF4IHllYXJzIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkFueSBDb3JyZXNwb25kZW5jZSBmcm9tIHRoZSBJUlM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIHJlY2VpdmVkIGFueSBub3RpY2VzIG9yIGxldHRlcnMgZnJvbSB0aGUgSVJTIHJlZ2FyZGluZyB5b3VyIGpvaW50IHRheCBsaWFiaWxpdHksIHBsZWFzZSBpbmNsdWRlIGNvcGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwsIG9yIHVwbG9hZC4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBwcm9jZXNzIGNhbiBiZSBjb21wbGV4LCBidXQgd2UgYXJlIGhlcmUgdG8gZ3VpZGUgeW91IHRocm91Z2ggaXQuIE91ciBnb2FsIGlzIHRvIGVuc3VyZSB3ZSBoYXZlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHlvdXIgc2l0dWF0aW9uIHRvIGFkdm9jYXRlIGZvciB0aGUgbW9zdCBmYXZvcmFibGUgb3V0Y29tZSBvbiB5b3VyIGJlaGFsZi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiMTA5OSBORUMgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCIxMDk5IE5FQyBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCByZXF1aXJlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCB5b3VyIHNvdXJjZXMgb2YgaW5jb21lLiBTcGVjaWZpY2FsbHksIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgeW91ciAxMDk5IE5FQyBJbmNvbWUuIFRoZSAxMDk5LU5FQyBmb3JtIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uLjwvcD5cclxuICAgIDxwPlRvIGVuc3VyZSBhIHRob3JvdWdoIGFuZCBhY2N1cmF0ZSB0YXggcHJlcGFyYXRpb24sIHBsZWFzZSBwcm92aWRlIHVzIHdpdGggdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPkFsbCAxMDk5LU5FQyBmb3JtczwvYj4geW91IHJlY2VpdmVkIGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgPGI+YWRkaXRpb25hbCBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uPC9iPiBub3QgcmVwb3J0ZWQgb24gYSAxMDk5LU5FQyBmb3JtLjwvbGk+XHJcbiAgICAgICAgPGxpPkluZm9ybWF0aW9uIHJlZ2FyZGluZyA8Yj5leHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgMTA5OSBORUMgaW5jb21lPC9iPiwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPklmIHlvdSBoYXZlIG5vdCB5ZXQgcmVjZWl2ZWQgYWxsIHlvdXIgMTA5OS1ORUMgZm9ybXMsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHByb3ZpZGUgYW4gZXN0aW1hdGUgb2Ygd2hlbiB5b3UgZXhwZWN0IHRvIHJlY2VpdmUgdGhlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciBpbmNvbWUgYW5kIGF2b2lkaW5nIHBvdGVudGlhbCBwZW5hbHRpZXMgb3IgYXVkaXRzIGZyb20gdGhlIElSUy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcmVhY2ggb3V0IHRvIHVzIGRpcmVjdGx5IHNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgcHJvY2Vzc2VkIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LjwvcD5cclxuYCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTY2hlZHVsZSBLLTEgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIFNjaGVkdWxlIEsgaW5jb21lIGZvciB0aGUgY3VycmVudCB0YXggeWVhci4gSW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgaXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHdlIGdhdGhlciBhbGwgbmVjZXNzYXJ5IGRvY3VtZW50cyByZWxhdGVkIHRvIHRoaXMgaW5jb21lLjwvcD5cclxuICAgIDxwPklmIHdlIGFyZSBwcmVwYXJpbmcgeW91ciBidXNpbmVzcyByZXR1cm4sIHJlc3QgYXNzdXJlZCB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUgdGhlIGFwcGxpY2FibGUgU2NoZWR1bGUgSy0xKHMpIGZvciB5b3VyIGJ1c2luZXNzIGludGVyZXN0cy4gSG93ZXZlciwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgY29sbGVjdCBjb3BpZXMgb2YgPHN0cm9uZz5hbGwgb3RoZXIgU2NoZWR1bGUgSy0xczwvc3Ryb25nPiB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgdG8gaW5jb3Jwb3JhdGUgaW50byB5b3VyIHBlcnNvbmFsIHRheCByZXR1cm4uPC9wPiAgXHJcbiAgICA8aDM+U3BlY2lmaWMgRG9jdW1lbnQgUmVxdWVzdDo8L2gzPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BbnkgYW5kIGFsbCBTY2hlZHVsZSBLLTEocykgeW91IGhhdmUgcmVjZWl2ZWQgZnJvbTo8L2xpPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPlBhcnRuZXJzaGlwczwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5TIENvcnBvcmF0aW9uczwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5Fc3RhdGUgb3IgVHJ1c3RzPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSA8c3Ryb25nPmNsZWFyIGFuZCBsZWdpYmxlPC9zdHJvbmc+IHRvIHByZXZlbnQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgcmV0dXJuLiBZb3UgbWF5IHN1Ym1pdCB0aGVzZSBkb2N1bWVudHMgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwsIG9yIGNvbnRhY3QgdXMgdG8gbWFrZSBhbHRlcm5hdGl2ZSBhcnJhbmdlbWVudHMgaWYgbmVjZXNzYXJ5LjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhbnkgYXNzaXN0YW5jZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2Ygc2VsZi1lbXBsb3ltZW50IGluY29tZSBub3QgcmVwb3J0ZWQgdGhyb3VnaCAxMDk5LU5FQyBmb3JtcyBvciBhIFNjaGVkdWxlIEstMS4gVG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF4aW1pemVzIHlvdXIgYmVuZWZpdHMsIGl0J3MgY3J1Y2lhbCB3ZSBnYXRoZXIgbW9yZSBkZXRhaWxzIGFib3V0IHRoZXNlIHNvdXJjZXMgb2YgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eTo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSB0aGUgbmF0dXJlIG9mIGVhY2ggYWN0aXZpdHkgZnJvbSB3aGljaCB5b3UgZGVyaXZlIHNlbGYtZW1wbG95bWVudCBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBvcGVyYXRpb246PC9zdHJvbmc+IEZvciBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eSwgc3BlY2lmeSB0aGUgZGF0ZXMgb3IgcmFuZ2Ugb2YgZGF0ZXMgZHVyaW5nIHdoaWNoIHlvdSBlYXJuZWQgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgaW5jb21lIGdlbmVyYXRlZDo8L3N0cm9uZz4gRm9yIGVhY2ggYWN0aXZpdHksIHByb3ZpZGUgdGhlIHRvdGFsIGFtb3VudCBvZiBpbmNvbWUgZWFybmVkIGJlZm9yZSBhbnkgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBpbmN1cnJlZDo8L3N0cm9uZz4gTGlzdCBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eS4gUGxlYXNlIGNhdGVnb3JpemUgdGhlc2UgZXhwZW5zZXMgKGUuZy4sIG9mZmljZSBzdXBwbGllcywgdHJhdmVsLCBhZHZlcnRpc2luZykuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWNvcmRzIG9yIGRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleGlzdGluZyByZWNvcmRzIG9yIGRvY3VtZW50YXRpb24gdGhhdCBjb3Jyb2JvcmF0ZSB5b3VyIGluY29tZSBhbmQgZXhwZW5zZXMsIHN1Y2ggYXMgYmFuayBzdGF0ZW1lbnRzLCByZWNlaXB0cywgaW52b2ljZXMsIG9yIGNvbnRyYWN0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IGFtb3VudCBvZiB0YXggeW91IG93ZSBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIHRoYXQgY2FuIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgdGltZWx5IGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQsIGFuZCB3ZSBhcmUgaGVyZSB0byBoZWxwIGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRW1wbG95bWVudCBXYWdlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRW1wbG95bWVudCBXYWdlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBlbnRydXN0aW5nIHVzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIEFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgcmV2aWV3IGFuZCBpbiBvdXIgcXVlc3QgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgd2FnZXMgZnJvbSBlbXBsb3ltZW50IG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCBlZmZlY3RpdmVseSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBhbGwgVy0yIGZvcm1zIHJlY2VpdmVkIGZyb20geW91ciBlbXBsb3llcnMuIFRoaXMgaW5jbHVkZXMgd2FnZXMgZWFybmVkIGZyb20gYWxsIHNvdXJjZXMsIG5vdCBqdXN0IGZyb20gdGhlIFMtQ29ycG9yYXRpb24sIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5WZXJpZmljYXRpb24gb2YgUy1Db3Jwb3JhdGlvbiBXYWdlczo8L3N0cm9uZz4gSWYgd2UgYXJlIGFsc28gaGFuZGxpbmcgeW91ciBidXNpbmVzcyB0YXhlcyBmb3IgYW4gUy1Db3Jwb3JhdGlvbiwgd2UgbGlrZWx5IGhhdmUgdGhlIHdhZ2UgaW5mb3JtYXRpb24gZm9yIHRoYXQgZW50aXR5LiBIb3dldmVyLCBmb3IgdGhvcm91Z2huZXNzIGFuZCBjb21wbGlhbmNlLCBwbGVhc2UgY29uZmlybSBpZiB0aGUgd2FnZXMgZnJvbSB0aGUgUy1Db3Jwb3JhdGlvbiBhcmUgZnVsbHkgcmVwcmVzZW50ZWQgaW4gdGhlIGRvY3VtZW50cyB3ZSBhbHJlYWR5IGhvbGQuIFRoaXMgd2lsbCBoZWxwIHVzIHZlcmlmeSB0aGF0IGFsbCBpbmNvbWUgaXMgYWNjdXJhdGVseSByZXBvcnRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgSW5jb21lIERvY3VtZW50czo8L3N0cm9uZz4gU2hvdWxkIHlvdSBoYXZlIG90aGVyIHNvdXJjZXMgb2Ygd2FnZSBpbmNvbWUgKGUuZy4sIGNvbnRyYWN0IHdvcmssIGJvbnVzZXMsIGV0Yy4pIG5vdCBjb3ZlcmVkIGJ5IHRoZSBXLTIgZm9ybXMgcHJvdmlkZWQsIHBsZWFzZSBpbmNsdWRlIGFueSAxMDk5IGZvcm1zIG9yIG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIGNvb3BlcmF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIEtpbmRseSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gVGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByb3BlcnR5IG9yIFNlcnZpY2VzIExpZXUgV2FnZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlByb3BlcnR5L1NlcnZpY2VzIGluIExpZXUgb2YgV2FnZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBwcm9wZXJ0eSBhbmQvb3Igc2VydmljZXMgaW4gbGlldSBvZiB0cmFkaXRpb25hbCB3YWdlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIHR5cGUgb2YgY29tcGVuc2F0aW9uIGNvbnN0aXR1dGVzIHRheGFibGUgaW5jb21lIGFuZCBtdXN0IGJlIGFjY3VyYXRlbHkgcmVwb3J0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBmdWxseSBjb21wbGlhbnQgd2l0aCBJUlMgcmVndWxhdGlvbnMuPC9wPlxyXG4gICAgPHA+VG8gYWNjdXJhdGVseSByZWNvZ25pemUgYW5kIHJlcG9ydCB0aGVzZSBpdGVtcyBhcyB0YXhhYmxlIGluY29tZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIFByb3BlcnR5IG9yIFNlcnZpY2VzOjwvc3Ryb25nPiBQcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYW55IHByb3BlcnR5IG9yIHNlcnZpY2VzIHlvdSByZWNlaXZlZC4gUGxlYXNlIGluY2x1ZGUgcGh5c2ljYWwgY2hhcmFjdGVyaXN0aWNzIGZvciBwcm9wZXJ0eSBvciB0aGUgc2NvcGUgb2Ygc2VydmljZXMgcmVuZGVyZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkZhaXIgTWFya2V0IFZhbHVlIGF0IFRpbWUgb2YgUmVjZWlwdDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGZhaXIgbWFya2V0IHZhbHVlIChGTVYpIG9mIGVhY2ggcHJvcGVydHkgb3Igc2VydmljZSBhdCB0aGUgdGltZSB5b3UgcmVjZWl2ZWQgaXQuIElmIHlvdSBoYXZlIGFueSBhcHByYWlzYWxzIG9yIGRvY3VtZW50cyB0byBzdXBwb3J0IHRoZSBGTVYsIHBsZWFzZSBpbmNsdWRlIHRoZW0uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb3IgQWdyZWVtZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZG9jdW1lbnRhdGlvbiBvciB3cml0dGVuIGFncmVlbWVudHMgdGhhdCBkZXRhaWwgdGhlIGFycmFuZ2VtZW50IGZvciByZWNlaXZpbmcgcHJvcGVydHkgb3Igc2VydmljZXMgaW4gbGlldSBvZiB3YWdlcy4gVGhpcyBjYW4gaW5jbHVkZSBjb250cmFjdHMsIGVtYWlscywgb3IgYW55IGZvcm0gb2YgY29tbXVuaWNhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUmVjZWlwdDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGF0ZShzKSBvbiB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlIHByb3BlcnR5IG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5FbXBsb3llci9Qcm92aWRlciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgcHJvcGVydHkgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGFzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBhcyBwb3NzaWJsZS4gSW5jb21wbGV0ZSBvciBpbmFjY3VyYXRlIGluZm9ybWF0aW9uIG1heSBsZWFkIHRvIGRlbGF5cyBpbiB0aGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuIG9yIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIHJlZ2FyZGluZyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3JpdGljYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90aWNlZCB5b3UndmUgbWVudGlvbmVkIGJlaW5nIHJlaW1idXJzZWQgZm9yIGNlcnRhaW4gZXhwZW5zZXMgdW5kZXIgYW4gRW1wbG95ZWUgQWNjb3VudGFibGUgUGxhbi4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSByZWltYnVyc2VtZW50cyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZm9ybWFsIHdyaXR0ZW4gQWNjb3VudGFibGUgUGxhbiBwcm92aWRlZCBieSB5b3VyIGVtcGxveWVyLiBUaGlzIHNob3VsZCBvdXRsaW5lIHRoZSBleHBlbnNlIGFsbG93YW5jZSBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcmVpbWJ1cnNlbWVudCBwb2xpY3kuPC9saT5cclxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gb3IgY29ycmVzcG9uZGVuY2UgZnJvbSB5b3VyIGVtcGxveWVyIGNvbmZpcm1pbmcgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHRoZSBBY2NvdW50YWJsZSBQbGFuLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgdGhlIGV4cGVuc2VzIHJlaW1idXJzZWQgdW5kZXIgdGhlIHBsYW4sIGluY2x1ZGluZyBkYXRlcywgYW1vdW50cywgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIGV4cGVuc2UgKHJlY2VpcHRzIG9yIGludm9pY2VzKSBwcm92aWRlZCB0byB5b3VyIGVtcGxveWVyIGZvciByZWltYnVyc2VtZW50IHVuZGVyIHRoZSBwbGFuLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIHJlaW1idXJzZW1lbnRzIG9yIHRoZSBBY2NvdW50YWJsZSBQbGFuLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdXMgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCBzbW9vdGhseSB3aXRoIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBlbnN1cmluZyBhbGwgZm9ybXMgb2YgY29tcGVuc2F0aW9uLCBpbmNsdWRpbmcgdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMsIGFyZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIG9uIHlvdXIgdGF4IHJldHVybnMuIEJhc2VkIG9uIG91ciBwcmV2aW91cyBjb21tdW5pY2F0aW9uLCBpdCBhcHBlYXJzIHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBiZW5lZml0cyB0aGF0IG5lZWQgdG8gYmUgcmV2aWV3ZWQgZnVydGhlci4gVG8gYXNzaXN0IHlvdSBwcm9wZXJseSwgd2UgcmVxdWVzdCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRldGFpbHM6PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0IHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21wYW55IGNhcnMsIG1lbWJlcnNoaXBzLCBlZHVjYXRpb25hbCBhc3Npc3RhbmNlLCBldGMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIElmIHlvdSdyZSB1bnN1cmUsIHBsZWFzZSBwcm92aWRlIGFuIGVzdGltYXRlIGFuZCB0aGUgYmFzaXMgZm9yIHRoaXMgZXN0aW1hdGUuPC9saT5cclxuICA8bGk+PHN0cm9uZz5BbnkgYW1vdW50cyBjb250cmlidXRlZCBieSB5b3U6PC9zdHJvbmc+IElmIHlvdSBtYWRlIGNvbnRyaWJ1dGlvbnMgdG93YXJkIHRoZSBjb3N0IG9mIGFueSBiZW5lZml0LCBwbGVhc2Ugc3BlY2lmeSB0aGUgYW1vdW50cyBhbmQgZm9yIHdoaWNoIGJlbmVmaXRzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5EYXRlczo8L3N0cm9uZz4gVGhlIHBlcmlvZCBkdXJpbmcgd2hpY2ggeW91IHJlY2VpdmVkIHRoZXNlIGJlbmVmaXRzLiBJbmNsdWRlIHNwZWNpZmljIGRhdGVzIGlmIHBvc3NpYmxlLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgSW5mb3JtYXRpb246PC9zdHJvbmc+IFRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBlbXBsb3llcihzKSBwcm92aWRpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cclxuPC9vbD5cclxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHRoZSB0YXhhYmxlIHZhbHVlIG9mIHRoZXNlIGZyaW5nZSBiZW5lZml0cyBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk5vbiBUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZmluYWxpemluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgaWRlbnRpZmllZCBwb3RlbnRpYWwgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHRoYXQgbWF5IGFwcGx5IHRvIHlvdXIgc2l0dWF0aW9uLiBUbyBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBvdXRjb21lLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBhbnkgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHlvdSBtYXkgaGF2ZSByZWNlaXZlZDo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgbWF5IGluY2x1ZGUgaGVhbHRoIHNhdmluZ3MgYWNjb3VudHMgKEhTQXMpLCBlbXBsb3llZSBkaXNjb3VudHMsIHB1YmxpYyB0cmFuc2l0IHBhc3NlcywgZXRjLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlZhbHVlIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIChGTVYpIG9mIGVhY2ggYmVuZWZpdC4gRm9yIG5vbi10YXhhYmxlIGJlbmVmaXRzLCB0aGlzIGhlbHBzIGluIHJlY29yZC1rZWVwaW5nIGFuZCBjb25maXJtaW5nIGV4ZW1wdGlvbiBzdGF0dXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29udHJpYnV0aW9uIGFtb3VudHMsIGlmIGFueTo8L3N0cm9uZz4gSWYgeW91IGhhdmUgY29udHJpYnV0ZWQgdG93YXJkcyBhbnkgb2YgdGhlc2UgYmVuZWZpdHMsIGluZGljYXRlIHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBjb3Jyb2JvcmF0ZSB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgcmVjZWlwdDo8L3N0cm9uZz4gVGhlIHRpbWVmcmFtZSBkdXJpbmcgd2hpY2ggeW91IHJlY2VpdmVkIHRoZXNlIGJlbmVmaXRzLiBJbmNsdWRlIGFzIHByZWNpc2UgZGF0ZXMgYXMgcG9zc2libGUuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgb3IgcHJvdmlkZXIgaW5mb3JtYXRpb246PC9zdHJvbmc+IFRoZSBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGVtcGxveWVyKHMpIG9yIHRoaXJkLXBhcnR5IHByb3ZpZGVyKHMpIG9mZmVyaW5nIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+R2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24gaGVscHMgZW5zdXJlIHRoYXQgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIHRoYXQgeW91IHJlY2VpdmUgdGhlIGZ1bGwgYWR2YW50YWdlIG9mIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cy4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBuZWVkIGFueSBoZWxwIGlkZW50aWZ5aW5nIG9yIGRvY3VtZW50aW5nIHRoZXNlIGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGhpZ2hseSBhcHByZWNpYXRlZCBhcyB3ZSBzdHJpdmUgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gZWZmaWNpZW50bHkuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVmV0ZXJhbiBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVkEgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBBcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydCB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgVmV0ZXJhbiBCZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5UbyBhc3Npc3QgdXMgaW4gdGhpcyB0YXNrLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIHRoZSBWZXRlcmFuIEJlbmVmaXRzIHlvdSByZWNlaXZlZCwgaW5jbHVkaW5nIGFueSBkaXNhYmlsaXR5LCBlZHVjYXRpb24sIGFuZCBwZW5zaW9uIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPk9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggdHlwZSBvZiBiZW5lZml0IHJlY2VpdmVkLCBzdWNoIGFzIGF3YXJkIGxldHRlcnMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIFZldGVyYW5zIEFmZmFpcnMgKFZBKS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgY29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgVkEgb3Igb3RoZXIgcmVsZXZhbnQgZW50aXRpZXMgcmVnYXJkaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHlvdXIgYmVuZWZpdHMuPC9saT5cclxuICAgICAgICA8bGk+VG90YWwgYW1vdW50IHJlY2VpdmVkIGZvciBlYWNoIGJlbmVmaXQgdGhyb3VnaG91dCB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+QW55IG90aGVyIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBwcm92aWRlIGNsYXJpdHkgb24gdGhlIG5hdHVyZSBhbmQgYW1vdW50IG9mIHlvdXIgVmV0ZXJhbiBCZW5lZml0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggYmVuZWZpdHMgYXJlIHRheGFibGUgYW5kIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuIFBsZWFzZSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGlmZSBJbnN1cmFuY2UgUGF5bWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHlvdXIgbWVudGlvbiBvZiByZWNlaXZpbmcgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB0aGVzZSBwcm9jZWVkcyBhcmUgaW5kZWVkIG5vbi10YXhhYmxlLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHJlY2VpdmVkIGZyb20gbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBwZXJ0YWluaW5nIHRvIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50cy48L2xpPlxyXG4gICAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGluc3VyZWQgaW5kaXZpZHVhbCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdS48L2xpPlxyXG4gICAgICA8bGk+QW55IGNvbW11bmljYXRpb25zIG9yIGxldHRlcnMgZnJvbSB0aGUgaW5zdXJhbmNlIGNvbXBhbnkgcmVnYXJkaW5nIHRoZSB0YXggc3RhdHVzIG9mIHRoZXNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxzIHJlZ2FyZGluZyBpZiB0aGUgcG9saWN5IHdhcyBwdXJjaGFzZWQgd2l0aCBhZnRlci10YXggb3IgcHJlLXRheCBkb2xsYXJzLjwvbGk+XHJcbiAgICAgIDxsaT5JZiBhbnkgcG9ydGlvbiBvZiB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudCB3YXMgYW4gaW52ZXN0bWVudCByZXR1cm4sIHBsZWFzZSBwcm92aWRlIHJlbGF0ZWQgZG9jdW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBndWFyYW50ZWUgdGhlIGFjY3VyYWN5IGFuZCBpbnRlZ3JpdHkgb2YgeW91ciB0YXggcmV0dXJuLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBBcyB3ZSBwcm9jZWVkIHdpdGggcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHVuZGVyIHRoZSBkaWZmaWN1bHR5LW9mLWNhcmUgcHJvdmlzaW9ucyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgbWF4aW1pemUgeW91ciBlbGlnaWJsZSBpbmNvbWUgZXhjbHVzaW9ucywgaXQncyBjcnVjaWFsIHdlIHZlcmlmeSBjZXJ0YWluIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGxpdmluZyBhcnJhbmdlbWVudCwgYXMgcGVyIElSUyBndWlkZWxpbmVzLjwvcD5cclxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiBjb25maXJtaW5nIHRoYXQgdGhlc2UgcGF5bWVudHMgcXVhbGlmeSBmb3IgaW5jb21lIGV4Y2x1c2lvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmNlOjwvc3Ryb25nPiBEb2N1bWVudHMgcHJvdmluZyB0aGF0IHlvdSBhbmQgdGhlIGluZGl2aWR1YWwgdW5kZXIgY2FyZSBzaGFyZWQgdGhlIHNhbWUgcHJpbWFyeSByZXNpZGVuY2UgZHVyaW5nIHRoZSByZWNlaXB0IG9mIHRoZXNlIHBheW1lbnRzLiBUaGlzIGNvdWxkIGluY2x1ZGUgdXRpbGl0eSBiaWxscywgYSByZW50YWwgYWdyZWVtZW50LCBvciBob21lb3duZXIncyBpbnN1cmFuY2UgaW4gYm90aCBvZiB5b3VyIG5hbWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgQ2FyZSBSZWNpcGllbnQ6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJzb24gcmVjZWl2aW5nIGNhcmUsIGluY2x1ZGluZyB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91IGFuZCBhbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGlkZW50aWZpZXMgdGhlaXIgbmVlZCBmb3IgY2FyZSAoZS5nLiwgYSBsZXR0ZXIgZnJvbSBhIGhlYWx0aGNhcmUgcHJvdmlkZXIpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgcmVjb3JkcyBvZiB0aGUgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHlvdSByZWNlaXZlZCwgYXMgdGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBleGFjdCBhbW91bnRzIGFuZCB0aGUgcGVyaW9kcyBjb3ZlcmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IEZvcm1hbCBBZ3JlZW1lbnRzIG9yIENvbnRyYWN0czo8L3N0cm9uZz4gSWYgdGhlcmUgd2FzIGEgZm9ybWFsIGFncmVlbWVudCBvciBjb250cmFjdCBkZXRhaWxpbmcgdGhlIGNhcmUgcHJvdmlkZWQsIHBsZWFzZSBpbmNsdWRlIHRoaXMgYXMgd2VsbC4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBpZiB0aGUgY2FyZSBhcnJhbmdlbWVudCB3YXMgZmFjaWxpdGF0ZWQgdGhyb3VnaCBhIHN0YXRlIG9yIHRoaXJkLXBhcnR5IGFnZW5jeS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHdlIGNvbXBseSB3aXRoIHRheGluZyBhdXRob3JpdGllcyB3aGlsZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgeW91ciBmaW5hbmNlcy4gSWYgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cyBwb3NlIGEgZGlmZmljdWx0eSBvciBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyBhbmQgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGJlbmVmaXRzIGFyZSBlbGlnaWJsZSB0byBiZSBleGNsdWRlZCBmcm9tIHlvdXIgaW5jb21lLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkLjwvcD5cclxuICAgIDxwPktpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gc2hvd2luZyB0aGUgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+Q29uZmlybWF0aW9uIG9uIHdobyBwYWlkIHRoZSBpbnN1cmFuY2UgcHJlbWl1bXMgKHlvdSBvciB5b3VyIGVtcGxveWVyKS48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHlvdSBwYWlkIHRvd2FyZHMgdGhlIHByZW1pdW1zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IHN1cHBvcnRpbmcgZG9jdW1lbnRzIGZvciB0aGUgcGF5bWVudHMgbWFkZSBieSB5b3UgKHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cykuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5JZiB5b3VyIGVtcGxveWVyIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgcGFpZCBieSB5b3VyIGVtcGxveWVyIHRvd2FyZHMgdGhlIHByZW1pdW1zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50cyBpbmRpY2F0aW5nIGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgKHBheSBzdHVicywgZW1wbG95ZXIgbGV0dGVycykuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZGV0ZXJtaW5lIHRoZSB0YXhhYmxlIHBvcnRpb24sIGlmIGFueSwgb2YgeW91ciBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cy4gUHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggZmlsaW5nIGFuZCBwb3RlbnRpYWxseSBsb3dlciB5b3VyIHRheGFibGUgaW5jb21lLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgaWYgd2UgY2FuIGJlIG9mIGZ1cnRoZXIgYXNzaXN0YW5jZS4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc2FiaWxpdHkgUmV0aXJlbWVudCBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gSW4gb3JkZXIgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIG5lZWQgYWRkaXRpb25hbCBkZXRhaWxzLiBUaGUgdGF4YWJpbGl0eSBvZiB0aGVzZSBiZW5lZml0cyBjYW4gZGVwZW5kIG9uIHdoZW4geW91IHRvb2sgcmV0aXJlbWVudCBkdWUgdG8gZGlzYWJpbGl0eS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGU6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUmV0aXJlbWVudDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgeW91IHJldGlyZWQgZHVlIHRvIGRpc2FiaWxpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIERpc2FiaWxpdHkgUmV0aXJlbWVudDo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24geW91IGhhdmUgdGhhdCBjb25maXJtcyB5b3VyIHJldGlyZW1lbnQgd2FzIGR1ZSB0byBkaXNhYmlsaXR5LiBUaGlzIG1heSBpbmNsdWRlIGxldHRlcnMgZnJvbSB5b3VyIGVtcGxveWVyLCB0aGUgcmV0aXJlbWVudCBwbGFuLCBvciBtZWRpY2FsIHJlY29yZHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBTcGVjaWZpYyBhbW91bnRzIGFuZCB0aGUgc291cmNlIG9mIHRoZSBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMuIFBsZWFzZSBpbmNsdWRlIGFueSByZWxhdGVkIGRvY3VtZW50cyBzdWNoIGFzIHN0YXRlbWVudHMgb3Igbm90aWNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXIgVy0yIG9yIDEwOTkgRm9ybXM6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBhbnkgd2FnZXMgb3IgZGlzYWJpbGl0eSBwYXltZW50cyB0aGF0IHdlcmUgcmVwb3J0ZWQgb24gVy0yIG9yIDEwOTkgZm9ybXMgaW4gdGhlIHllYXIgb2YgeW91ciByZXRpcmVtZW50LCBwbGVhc2UgcHJvdmlkZSB0aGVzZSBmb3Jtcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBDb3JyZXNwb25kZW5jZSBmcm9tIHRoZSBJUlM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIHJlY2VpdmVkIGFueSBub3RpY2VzIG9yIGxldHRlcnMgZnJvbSB0aGUgSVJTIHJlZ2FyZGluZyB5b3VyIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cywgcGxlYXNlIGluY2x1ZGUgY29waWVzIG9mIHRoZXNlIGNvbW11bmljYXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlIGFib3ZlIGluZm9ybWF0aW9uIGlzIHZpdGFsIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpY3Mgb2YgeW91ciBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMgd2lsbCBhaWQgdXMgaW4gZGV0ZXJtaW5pbmcgdGhlaXIgdGF4YWJpbGl0eSBhbmQgZW5zdXJpbmcgdGhhdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhcmUgcHJlY2lzZWx5IGNhbGN1bGF0ZWQuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGhpZ2hseSBhcHByZWNpYXRlZC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2xlcmd5IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDbGVyZ3kgV2FnZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBXLTIgd2FnZXMgYXMgYSBjbGVyZ3kgbWVtYmVyLiBUbyBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCB0byBwb3RlbnRpYWxseSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2UgcmVxdWlyZSBmdXJ0aGVyIGRldGFpbHMgcmVnYXJkaW5nIHlvdXIgY29tcGVuc2F0aW9uIHBhY2thZ2UuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5XLTIgRm9ybTo8L2I+IElmIG5vdCBhbHJlYWR5IHByb3ZpZGVkLCBpbmNsdWRlIGFueSBXLTIgZm9ybXMgaXNzdWVkIGJ5IHlvdXIgcmVsaWdpb3VzIGluc3RpdHV0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkhvdXNpbmcgQWxsb3dhbmNlIERvY3VtZW50YXRpb246PC9iPiBEZXRhaWxlZCBzdGF0ZW1lbnQgb3IgbGV0dGVyIGZyb20geW91ciByZWxpZ2lvdXMgaW5zdGl0dXRpb24gc3BlY2lmeWluZyB0aGUgYW1vdW50IGRlc2lnbmF0ZWQgYXMgaG91c2luZyBhbGxvd2FuY2UuPC9saT5cclxuICAgICAgICA8bGk+PGI+U2VsZi1FbXBsb3ltZW50IFRheDo8L2I+IENvbmZpcm1hdGlvbiBvbiB3aGV0aGVyIHlvdSBoYXZlIHRha2VuIGEgdm93IG9mIHBvdmVydHkgKGlmIGFwcGxpY2FibGUpLCBvciBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIG9wdGluZyBvdXQgb2Ygc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5FeHBlbnNlIFJlaW1idXJzZW1lbnRzOjwvYj4gRG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBleHBlbnNlIHJlaW1idXJzZW1lbnRzIHJlY2VpdmVkIHVuZGVyIGFuIGFjY291bnRhYmxlIHBsYW4uPC9saT5cclxuICAgICAgICA8bGk+PGI+T3RoZXIgQ29tcGVuc2F0aW9uOjwvYj4gSW5mb3JtYXRpb24gb24gYW55IG90aGVyIGNvbXBlbnNhdGlvbiByZWNlaXZlZCBpbiB5b3VyIGNhcGFjaXR5IGFzIGNsZXJneSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3ZlIG9mZmVyaW5ncywgZmVlcyBmb3Igc2VydmljZXMgKHdlZGRpbmdzLCBmdW5lcmFscywgZXRjLiksIGFuZCBwYXJzb25hZ2UgYWxsb3dhbmNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gYWNjdXJhdGVseSByZXByZXNlbnQgeW91ciBlYXJuaW5ncyBhbmQgdG8gY2FsY3VsYXRlIGFueSBwb3RlbnRpYWwgZGVkdWN0aW9ucyBjb3JyZWN0bHkuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybnMgYXJlIHByZXBhcmVkIGluIGEgdGltZWx5IGFuZCBlZmZpY2llbnQgbWFubmVyLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGlzIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnRlcmVzdCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkludGVyZXN0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+SW4gcmV2aWV3aW5nIHlvdXIgZmluYW5jaWFsIGFjdGl2aXRpZXMgZm9yIHRoZSB0YXggeWVhciwgeW91IGluZGljYXRlZCByZWNlaXZpbmcgaW50ZXJlc3QgaW5jb21lLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4YWJpbGl0eSBvZiB0aGlzIGluY29tZSBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBkZXRhaWxzLiBLaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxiPlNvdXJjZSBvZiBJbnRlcmVzdCBJbmNvbWU6PC9iPiBQbGVhc2Ugc3BlY2lmeSB0aGUgaW5zdGl0dXRpb24ocykgb3IgZW50aXR5KGllcykgZnJvbSB3aGljaCB5b3UgcmVjZWl2ZWQgaW50ZXJlc3QgaW5jb21lIChlLmcuLCBiYW5rcywgY3JlZGl0IHVuaW9ucykuPC9saT5cclxuICAgICAgPGxpPjxiPkFtb3VudCBSZWNlaXZlZDo8L2I+IENvbmZpcm0gdGhlIHRvdGFsIGFtb3VudCBvZiBpbnRlcmVzdCBpbmNvbWUgcmVjZWl2ZWQgZnJvbSBlYWNoIHNvdXJjZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5BY2NvdW50IFR5cGVzOjwvYj4gSWRlbnRpZnkgdGhlIHR5cGUgb2YgYWNjb3VudHMgdGhhdCBnZW5lcmF0ZWQgdGhlIGludGVyZXN0IChlLmcuLCBzYXZpbmdzLCBjaGVja2luZywgY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQpLjwvbGk+XHJcbiAgICAgIDxsaT48Yj5UYXggRm9ybXMgUmVjZWl2ZWQ6PC9iPiBMaXN0IGFueSB0YXggZm9ybXMgeW91IGhhdmUgcmVjZWl2ZWQgcmVsYXRlZCB0byBpbnRlcmVzdCBpbmNvbWUsIHN1Y2ggYXMgRm9ybSAxMDk5LUlOVCBvciBGb3JtIDEwOTktT0lELjwvbGk+XHJcbiAgICAgIDxsaT48Yj5Gb3JlaWduIEludGVyZXN0OjwvYj4gSWYgYW55IGludGVyZXN0IGluY29tZSB3YXMgZWFybmVkIGZyb20gZm9yZWlnbiBhY2NvdW50cyBvciBzb3VyY2VzLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxzLCBpbmNsdWRpbmcgdGhlIGNvdW50cnkgb2Ygb3JpZ2luLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgeW91ciBpbnRlcmVzdCBpbmNvbWUgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGNvcnJlY3QuIFlvdSBjYW4gYXR0YWNoIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBieSByZXBseWluZyB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZGluZyB0aGVtIGRpcmVjdGx5IHRvIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJCYW5rIEFjY291bnQgT3BlbmluZyBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJldmlld2luZyB5b3VyIHRheCBzaXR1YXRpb24gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgYSBnaWZ0IGZvciBvcGVuaW5nIGFuIGFjY291bnQgYXQgYSBmaW5hbmNpYWwgaW5zdGl0dXRpb24uIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiB3aGVyZSB0aGUgYWNjb3VudCB3YXMgb3BlbmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBkYXRlIHRoZSBhY2NvdW50IHdhcyBvcGVuZWQuPC9saT5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZ2lmdCByZWNlaXZlZCAoZS5nLiwgY2FzaCwgbWVyY2hhbmRpc2UsIG9yIHNlcnZpY2VzKS48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgdGhlIGdpZnQgYXQgdGhlIHRpbWUgaXQgd2FzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gcmVnYXJkaW5nIHRoZSBnaWZ0IChlLmcuLCBhIGxldHRlciwgZW1haWwgY29uZmlybWF0aW9uLCBvciBzdGF0ZW1lbnQgaW5kaWNhdGluZyB0aGUgdmFsdWUgb2YgdGhlIGdpZnQpLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBpZiB5b3UgaGF2ZSByZWNlaXZlZCBtb3JlIHRoYW4gb25lIGdpZnQgZm9yIG9wZW5pbmcgYWNjb3VudHMgd2l0aGluIHRoZSBzYW1lIHRheCB5ZWFyLCBhbmQgaWYgc28sIHRoZSBkZXRhaWxzIGZvciBlYWNoLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGNvbXBseSB3aXRoIGFsbCBJUlMgcmVxdWlyZW1lbnRzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDRCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ0QgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgb2YgeW91ciBpbmNvbWUgZnJvbSBDZXJ0aWZpY2F0ZXMgb2YgRGVwb3NpdCAoQ0RzKSBmb3IgdGhlIHRheCB5ZWFyLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCB0byBjb21wbHkgd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIHRvIHBvdGVudGlhbGx5IG9wdGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5OYW1lIG9mIHRoZSBCYW5rIG9yIEZpbmFuY2lhbCBJbnN0aXR1dGlvbjo8L3N0cm9uZz4gV2hlcmUgdGhlIENEIGlzIGhlbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BY2NvdW50IE51bWJlcjo8L3N0cm9uZz4gVGhpcyBoZWxwcyBpbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgQ0QuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBJbnRlcmVzdCBFYXJuZWQ6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgaW50ZXJlc3QgZWFybmVkIGZyb20gdGhlIENEIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5DRCBUZXJtOjwvc3Ryb25nPiBUaGUgZHVyYXRpb24gb3IgdGVybSBvZiB0aGUgQ0QgKGUuZy4sIDYgbW9udGhzLCAxIHllYXIpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBQdXJjaGFzZTo8L3N0cm9uZz4gV2hlbiB5b3Ugb3JpZ2luYWxseSBhY3F1aXJlZCB0aGUgQ0QuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYXR1cml0eSBEYXRlOjwvc3Ryb25nPiBXaGVuIHRoZSBDRCByZWFjaGVkIG9yIHdpbGwgcmVhY2ggaXRzIGZ1bGwgdGVybS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPjEwOTktSU5UIEZvcm1zOjwvc3Ryb25nPiBJZiByZWNlaXZlZCwgcGxlYXNlIGluY2x1ZGUgY29waWVzIG9mIGFueSAxMDk5LUlOVCBmb3JtcyBhc3NvY2lhdGVkIHdpdGggdGhlIENEIGludGVyZXN0LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gWW91IG1heSB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBwcm92aWRlIHRoZW0gdmlhIGVtYWlsLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgdGF4LWV4ZW1wdCBpbnRlcmVzdCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBwb3NzaWJseSBmcm9tIG11bmljaXBhbCBib25kcyBvciBzaW1pbGFyIGludmVzdG1lbnRzLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudHMgb2YgVGF4LUV4ZW1wdCBJbnRlcmVzdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIDEwOTktSU5UIGZvcm1zIG9yIGVxdWl2YWxlbnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB5b3VyIHRheC1leGVtcHQgaW50ZXJlc3QgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIElzc3VpbmcgRW50aXRpZXM6PC9zdHJvbmc+IEEgbGlzdCBvciBzdGF0ZW1lbnQgaWRlbnRpZnlpbmcgdGhlIGVudGl0aWVzIHRoYXQgaXNzdWVkIHRoZSBib25kcyBvciBzaW1pbGFyIGludmVzdG1lbnRzLiBUaGlzIGluY2x1ZGVzIG11bmljaXBhbCwgc3RhdGUsIG9yIGZlZGVyYWwgZW50aXRpZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IERldGFpbDo8L3N0cm9uZz4gQSBicmVha2Rvd24gb2YgdGhlIGludmVzdG1lbnRzIGNvbnRyaWJ1dGluZyB0byB0YXgtZXhlbXB0IGludGVyZXN0LiBUaGlzIHNob3VsZCBpbmNsdWRlIHRoZSBwdXJjaGFzZSBkYXRlLCBwdXJjaGFzZSBhbW91bnRzLCBhbmQgYW55IHJlbGF0ZWQgbWF0dXJpdHkgZGF0ZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ccm9rZXJhZ2UgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBicm9rZXJhZ2UgYWNjb3VudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHRyYW5zYWN0aW9ucyBhbmQgaG9sZGluZ3MgaW4gdGF4LWV4ZW1wdCBpbnZlc3RtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFNVCAoQWx0ZXJuYXRpdmUgTWluaW11bSBUYXgpIENvbnNpZGVyYXRpb246PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgZG9jdW1lbnRhdGlvbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW55IG9mIHRoZSB0YXgtZXhlbXB0IGludGVyZXN0IGlzIHN1YmplY3QgdG8gdGhlIEFsdGVybmF0aXZlIE1pbmltdW0gVGF4LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbiBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIGNvbnRpbnVlZCBlZmZvcnQgdG8gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZXMsIHdlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGludGVyZXN0IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBmcm9tIHJlZGVlbWluZyBhbiBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9wPlxyXG5cclxuICAgIDxwPlRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBlbGlnaWJpbGl0eSBmb3IgZXhlbXB0aW9uIGFuZCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBJUlMsIHdlIGtpbmRseSByZXF1ZXN0IHlvdSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGNvcHkgb2YgRm9ybSAxMDk5LUlOVCBvciBzaW1pbGFyIHN0YXRlbWVudCBwcm92aWRlZCBieSB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uLCBpbmRpY2F0aW5nIHRoZSBhbW91bnQgb2YgaW50ZXJlc3QgcmVjZWl2ZWQgZnJvbSB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHJlY29yZHMgb2YgdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZHMgcmVkZWVtZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Qm9uZCBzZXJpYWwgbnVtYmVyczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SXNzdWUgZGF0ZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlJlZGVtcHRpb24gZGF0ZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHM8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gZm9yIHF1YWxpZmllZCBlZHVjYXRpb25hbCBleHBlbnNlcyBwYWlkIGR1cmluZyB0aGUgeWVhciwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VHVpdGlvbiBhbmQgZmVlczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q291cnNlIG1hdGVyaWFsczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIHJlcXVpcmVkIGV4cGVuc2VzIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UgYXQgYW4gZWxpZ2libGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb248L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIGVucm9sbG1lbnQgZnJvbSBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBmb3IgdGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSBib25kLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4YWJpbGl0eSBvZiB0aGUgaW50ZXJlc3QgaW5jb21lIGFuZCBwb3RlbnRpYWxseSBtYXhpbWl6aW5nIHlvdXIgdGF4IGJlbmVmaXRzLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIHJlY29tbWVuZCBjb21waWxpbmcgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXZpZGVuZCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpdmlkZW5kIEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpdmlkZW5kIGluY29tZSBvdmVyIHRoZSBwYXN0IHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmNvbWUgYW5kIG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BbGwgMTA5OS1ESVYgZm9ybXMgcmVjZWl2ZWQgZnJvbSBjb3Jwb3JhdGlvbnMgb3IgbXV0dWFsIGZ1bmRzLiBUaGlzIGluY2x1ZGVzIGRpc3RyaWJ1dGlvbnMgb2YgY2FzaCwgc3RvY2ssIG9yIG90aGVyIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgZm9yZWlnbiBkaXZpZGVuZHMgaW5jbHVkaW5nIHRoZSBhbW91bnQgaW4gZm9yZWlnbiBjdXJyZW5jeSwgdGhlIGNvdW50cnkgb2Ygb3JpZ2luLCBhbmQgYW55IGZvcmVpZ24gdGF4IHBhaWQuPC9saT5cclxuICAgICAgPGxpPkZvciBkaXZpZGVuZHMgcmVpbnZlc3RlZCwgcGxlYXNlIHByb3ZpZGUgc3RhdGVtZW50cyBvciBjb25maXJtYXRpb25zIHNob3dpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgIDxsaT5Bbnkgb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgZGl2aWRlbmRzIG5vdCBjb3ZlcmVkIGJ5IGEgMTA5OS1ESVYuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlIHRvIGF2b2lkIGFueSBwcm9jZXNzaW5nIGRlbGF5cy48L3A+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSBpcyBhcHByZWNpYXRlZCBhcyBpdCB3aWxsIGhlbHAgdXMgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbnMgZWZmaWNpZW50bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzcG9zZWQgQ2FwaXRhbCBBc3NldHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBkaXNwb3Npbmcgb2YgY2FwaXRhbCBhc3NldHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBjb21wbGV0ZSBhbmQgY29tcGxpYW50LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5EZXNjcmlwdGlvbiBvZiBlYWNoIGRpc3Bvc2VkIGFzc2V0OjwvYj4gSW5jbHVkZSB0aGUgdHlwZSBvZiBhc3NldCAoZS5nLiwgcmVhbCBlc3RhdGUsIHN0b2NrcywgYm9uZHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgYWNxdWlzaXRpb246PC9iPiBUaGUgcHVyY2hhc2UgZGF0ZSBvciB0aGUgZGF0ZSB5b3Ugb3JpZ2luYWxseSBjYW1lIGludG8gcG9zc2Vzc2lvbiBvZiBlYWNoIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkFjcXVpc2l0aW9uIGNvc3Q6PC9iPiBUaGUgb3JpZ2luYWwgcHVyY2hhc2UgcHJpY2Ugb3IgY29zdCBiYXNpcyBvZiBlYWNoIGFzc2V0LCBpbmNsdWRpbmcgYW55IGltcHJvdmVtZW50cyBtYWRlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgZGlzcG9zYWw6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLCBleGNoYW5nZWQsIG9yIG90aGVyd2lzZSBkaXNwb3NlZCBvZi48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5TYWxlIG9yIGRpc3Bvc2FsIHByb2NlZWRzOjwvYj4gVGhlIHRvdGFsIGFtb3VudCByZWNlaXZlZCBmcm9tIHRoZSBkaXNwb3NhbCBvZiB0aGUgYXNzZXQuPC9saT5cclxuICAgICAgICA8bGk+PGI+QXNzb2NpYXRlZCBleHBlbnNlczo8L2I+IEFueSBjb3N0cyBpbmN1cnJlZCBkaXJlY3RseSBmcm9tIHRoZSBzYWxlIG9yIGRpc3Bvc2FsIHByb2Nlc3MsIHN1Y2ggYXMgYnJva2VyJ3MgZmVlcywgYWR2ZXJ0aXNpbmcsIGxlZ2FsIGZlZXMsIGV0Yy48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5SZWFzb24gZm9yIGRpc3Bvc2FsOjwvYj4gQnJpZWZseSBkZXNjcmliZSB0aGUgcmVhc29uIGJlaGluZCB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBjYWxjdWxhdGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMgYW5kIGRldGVybWluaW5nIHRoZWlyIGltcGFjdCBvbiB5b3VyIHRheCBvYmxpZ2F0aW9ucy4gUGxlYXNlIGF0dGFjaCBhbnkgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIHNhbGVzIHJlY2VpcHRzLCBkZWVkcywgY29udHJhY3RzLCBvciBicm9rZXJhZ2Ugc3RhdGVtZW50cywgdG8gc3Vic3RhbnRpYXRlIHRoZSBkZXRhaWxzIHByb3ZpZGVkLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtYXkgaGF2ZS4gWW91IGNhbiByZWFjaCB1cyB2aWEgZW1haWwgb3IgcGhvbmUgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIERpZ2l0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNwb3NlZCBEaWdpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+WW91IGFuc3dlcmVkIFwiWWVzXCIgdG8gZGlzcG9zaW5nIG9mIGRpZ2l0YWwgYXNzZXRzIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgdHJhbnNhY3Rpb25zLCBwbGVhc2Ugc3VibWl0IHRoZSBmb2xsb3dpbmc6PC9wPlxyXG4gIDxvbD5cclxuICAgIDxsaT5UcmFuc2FjdGlvbiBkYXRlczwvbGk+XHJcbiAgICA8bGk+VHlwZXMgb2YgYXNzZXRzIGJvdWdodCwgc29sZCwgb3IgZXhjaGFuZ2VkPC9saT5cclxuICAgIDxsaT5BbW91bnRzIGludm9sdmVkIGluIGVhY2ggdHJhbnNhY3Rpb248L2xpPlxyXG4gICAgPGxpPkFueSAxMDk5IGZvcm1zIHJlY2VpdmVkIGZvciBkaWdpdGFsIGFzc2V0IGFjdGl2aXRpZXM8L2xpPlxyXG4gICAgPGxpPkRldGFpbHMgb2YgbWluaW5nLCBzdGFraW5nLCBvciBhaXJkcm9wIGluY29tZSwgaWYgYXBwbGljYWJsZTwvbGk+XHJcbiAgPC9vbD5cclxuICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEluY2x1ZGUgYWxsIHNhbGVzLCB0cmFkZXMsIGFuZCBleGNoYW5nZXMsIGV2ZW4gaWYgeW91IGRpZG4ndCByZWNlaXZlIGEgdGF4IGZvcm0uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk11dHVhbCBGdW5kIEdhaW5cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIEdhaW5cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIG9yZGVyIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgb24geW91ciB0YXggcmV0dXJuLCBhcyBwZXIgeW91ciBpbmRpY2F0aW9uIG9mIHJlY2VpdmluZyBnYWlucyBmcm9tIGEgbXV0dWFsIGZ1bmQgb3Igc2ltaWxhciBpbnZlc3RtZW50LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LURJViBGb3JtOjwvc3Ryb25nPiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9uIGRpdmlkZW5kcyBhbmQgZGlzdHJpYnV0aW9ucyB5b3UgcmVjZWl2ZWQgZnJvbSB5b3VyIG11dHVhbCBmdW5kIGludmVzdG1lbnRzLiBQbGVhc2UgZW5zdXJlIHRvIHByb3ZpZGUgdGhpcyBmb3JtIGlmIHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgd2VyZSByZXBvcnRlZCBvbiBpdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudCBvZiBBY2NvdW50Ojwvc3Ryb25nPiBUaGlzIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGFsbCB0cmFuc2FjdGlvbnMgd2l0aGluIHlvdXIgYWNjb3VudCwgaW5jbHVkaW5nIHB1cmNoYXNlcywgcmVkZW1wdGlvbnMsIGFuZCByZWludmVzdGVkIGRpdmlkZW5kcyB3aGljaCBoZWxwIHVzIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgeW91ciBnYWlucy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlllYXItRW5kIFN1bW1hcnk6PC9zdHJvbmc+IE9mdGVuIG11dHVhbCBmdW5kcyBwcm92aWRlIGEgeWVhci1lbmQgc3VtbWFyeSB0byB0aGVpciBpbnZlc3RvcnMuIFRoaXMgc3VtbWFyeSBjYW4gYmUgdmVyeSBoZWxwZnVsIGluIHByZXBhcmluZyB5b3VyIHRheGVzIGFzIGl0IGNvbnNvbGlkYXRlcyBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50czo8L3N0cm9uZz4gVGhpcyBjb3VsZCBpbmNsdWRlIGFkZGl0aW9uYWwgMTA5OSBmb3JtcyAobGlrZSAxMDk5LUIgaWYgYW55IHNhbGVzIG9jY3VycmVkKSwgb3JpZ2luYWwgaW52ZXN0bWVudCBzdGF0ZW1lbnRzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4IHNpdHVhdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPldlIHVuZGVyc3RhbmQgdGhhdCBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzIG1heSByZXF1aXJlIHNvbWUgdGltZSwgaG93ZXZlciwgaGF2aW5nIHRoZXNlIHJlYWRpbHkgYXZhaWxhYmxlIHdpbGwgZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgZWZmaWNpZW5jeSBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBkaWZmaWN1bHRpZXMgb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBEaXNwb3NhbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTXV0dWFsIEZ1bmQgRGlzcG9zYWxcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgbWFkZSBhIGRpc3Bvc2FsIG9mIHNoYXJlcyBpbiBhIG11dHVhbCBmdW5kIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlZCBhY2N1cmF0ZWx5LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz4xMDk5LUIgZm9ybTwvc3Ryb25nPiBhc3NvY2lhdGVkIHdpdGggdGhlIG11dHVhbCBmdW5kIGRpc3Bvc2FsLCBpZiBhdmFpbGFibGUuIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgZGV0YWlscyBvbiB0aGUgc2FsZSBvZiB5b3VyIHNoYXJlcy48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCA8c3Ryb25nPnJlY29yZCBvZiB0aGUgcHVyY2hhc2U8L3N0cm9uZz4gb2YgdGhlIG11dHVhbCBmdW5kIHNoYXJlcyBpbmNsdWRpbmcgdGhlIHB1cmNoYXNlIGRhdGUgYW5kIGNvc3QgYmFzaXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgY2FsY3VsYXRpbmcgYW55IGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIHRoZSAxMDk5LUIgZm9ybSBpcyBub3QgYXZhaWxhYmxlLCBwbGVhc2UgcHJvdmlkZSBhbnkgPHN0cm9uZz5icm9rZXJhZ2Ugc3RhdGVtZW50czwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvd3MgdGhlIGRpc3Bvc2FsIG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMsIGluY2x1ZGluZyB0aGUgc2FsZSBkYXRlIGFuZCBhbW91bnQuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgPHN0cm9uZz5yZWludmVzdGVkIGRpdmlkZW5kczwvc3Ryb25nPiBvciBjYXBpdGFsIGdhaW5zIGRpc3RyaWJ1dGlvbnMsIGFzIHRoZXNlIGNhbiBhZGp1c3QgeW91ciBjb3N0IGJhc2lzIGFuZCBhZmZlY3QgdGhlIGNhbGN1bGF0aW9uIG9mIHlvdXIgY2FwaXRhbCBnYWluIG9yIGxvc3MuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5IYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlIGRpc3Bvc2FsIG9mIHlvdXIgbXV0dWFsIGZ1bmQgc2hhcmVzIGFuZCBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLiBUaGlzIHdpbGwgYWxzbyBoZWxwIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGxpYWJpbGl0eSBmb3IgdGhlIHllYXIuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgYWJvdXQgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJXYXNoIFNhbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIldhc2ggU2FsZSBUcmFuc2FjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGluZGljYXRpb24gb2YgYSBwb3NzaWJsZSBXYXNoIFNhbGUgdHJhbnNhY3Rpb24uIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgdHJhbnNhY3Rpb24gcmVjb3Jkczwvc3Ryb25nPiAtIFBsZWFzZSBwcm92aWRlIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHRoZSBzZWN1cml0eSB0aGF0IHdhcyBzb2xkIGFuZCB0aGVuIHJlcHVyY2hhc2VkLCBpbmNsdWRpbmcgZGF0ZXMgYW5kIGFtb3VudHMgZm9yIGVhY2ggdHJhbnNhY3Rpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IGJhc2lzIGZvciByZXB1cmNoYXNlZCBzZWN1cml0eTwvc3Ryb25nPiAtIERldGFpbHMgb2YgdGhlIGNvc3QgYmFzaXMgZm9yIHRoZSBzZWN1cml0aWVzIHJlcHVyY2hhc2VkIHdpdGhpbiBhIDYxLWRheSB3aW5kb3cgKDMwIGRheXMgYmVmb3JlIHRvIDMwIGRheXMgYWZ0ZXIgdGhlIHNhbGUpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBzdGF0ZW1lbnRzPC9zdHJvbmc+IC0gQ29waWVzIG9mIHlvdXIgYnJva2VyYWdlIGFjY291bnQgc3RhdGVtZW50cyBzaG93aW5nIHRoZSB0cmFuc2FjdGlvbnMgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Mb3NzZXMgcmVhbGl6ZWQ8L3N0cm9uZz4gLSBEb2N1bWVudGF0aW9uIG9mIGFueSBsb3NzZXMgcmVhbGl6ZWQgZnJvbSB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgY29ycmVzcG9uZGVuY2U8L3N0cm9uZz4gLSBDb3JyZXNwb25kZW5jZSBmcm9tIGJyb2tlcnMgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRvY3VtZW50cyBhcmUgb3JnYW5pemVkIGFuZCBjbGVhcmx5IGxhYmVsZWQgZm9yIGVhY2ggdHJhbnNhY3Rpb24uIFRoaXMgd2lsbCBmYWNpbGl0YXRlIGEgc21vb3RoZXIgYW5kIHF1aWNrZXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgV2FzaCBTYWxlIHRyYW5zYWN0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIHByb3ZpZGUgYWNjdXJhdGUgdGF4IGFkdmljZSBhbmQgcHJlcGFyYXRpb24uIEZ1cnRoZXIsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBhc3Npc3QgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSBXYXNoIFNhbGUgcnVsZSBhZmZlY3RzIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIGFueSBsb3NzZXMgeW91IG1pZ2h0IGhhdmUgaW5jdXJyZWQuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGVuc3VyZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBmaWxpbmdzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29sZCBIb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTb2xkIEhvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBzb2xkIGEgcGVyc29uYWwgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgY2xvc2luZyBkYXRlIHdoZW4gdGhlIHNhbGUgd2FzIG9mZmljaWFsbHkgY29tcGxldGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U2FsZSBQcmljZTo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCB5b3UgcmVjZWl2ZWQgZm9yIHRoZSBob21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpczo8L3N0cm9uZz4gT3JpZ2luYWwgcHVyY2hhc2UgcHJpY2UsIHBsdXMgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBob21lLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gQWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1haW4gUmVzaWRlbmNlIG9yIE5vdDo8L3N0cm9uZz4gUGxlYXNlIGNvbmZpcm0gaWYgdGhpcyB3YXMgeW91ciBtYWluIHJlc2lkZW5jZSBmb3IgYXQgbGVhc3QgdHdvIG9mIHRoZSBsYXN0IGZpdmUgeWVhcnMgcHJpb3IgdG8gdGhlIHNhbGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWNvcmRzIG9mIEhvbWUgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciByZWNvcmRzIG9mIGFueSBtYWpvciBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcHJvcGVydHksIHdoaWNoIGNhbiBhZmZlY3QgdGhlIGNvc3QgYmFzaXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBVc2U6PC9zdHJvbmc+IElmIG5vdCBhbHdheXMgdXNlZCBhcyBhIHBlcnNvbmFsIGhvbWUsIGRldGFpbHMgb24gYW55IHVzZSBvZiB0aGUgcHJvcGVydHkgZm9yIHJlbnRhbCwgYnVzaW5lc3MsIG9yIG90aGVyIG5vbi1wZXJzb25hbCB1c2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBBbnkgY29zdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYWxlLCBzdWNoIGFzIGxlZ2FsIGZlZXMsIHJlYWwgZXN0YXRlIGFnZW50IGNvbW1pc3Npb25zLCBhbmQgaG9tZSBzdGFnaW5nIGV4cGVuc2VzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkluc3RhbGxtZW50IFNhbGUgUGF5bWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkluc3RhbGxtZW50IFNhbGUgUGF5bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIHNvbGQgcHJvcGVydHkgdGhpcyB5ZWFyIHVuZGVyIGFuIGluc3RhbGxtZW50IHBsYW4uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgdHJhbnNhY3Rpb24gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgQWdyZWVtZW50Ojwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIGNvbXBsZXRlIHNhbGUgYWdyZWVtZW50IGRldGFpbGluZyB0aGUgdGVybXMgb2YgdGhlIGluc3RhbGxtZW50IHNhbGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZCAoZS5nLiwgbGFuZCwgYnVpbGRpbmcsIGVxdWlwbWVudCkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFNjaGVkdWxlOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiB0aGUgcGF5bWVudCBzY2hlZHVsZSBhZ3JlZWQgdXBvbiwgaW5jbHVkaW5nIHRoZSBkYXRlcyBhbmQgYW1vdW50cyBvZiBlYWNoIGluc3RhbGxtZW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW1vdW50cyBSZWNlaXZlZDo8L3N0cm9uZz4gVG90YWwgYW1vdW50cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgZG93biBwYXltZW50IGFuZCBhbnkgaW5zdGFsbG1lbnQgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QcmluY2lwYWwgJmFtcDsgSW50ZXJlc3QgQnJlYWtkb3duOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgYW1vdW50cyByZWNlaXZlZCBiZXR3ZWVuIHByaW5jaXBhbCBhbmQgaW50ZXJlc3QgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IEJhc2lzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHJlZ2FyZGluZyB0aGUgcHJvcGVydHkncyBvcmlnaW5hbCBjb3N0LCBpbXByb3ZlbWVudHMgbWFkZSwgYW5kIGFueSBkZXByZWNpYXRpb24gdGFrZW4gaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IHJlbGV2YW50IGV4cGVuc2VzIGluIHJlbGF0aW9uIHRvIHRoZSBzYWxlIHRoYXQgbWlnaHQgYmUgZGVkdWN0aWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJ1eWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBMZWdhbCBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGJ1eWVyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIGFueSBwcm9maXQgb3IgbG9zcyBmcm9tIHRoZSBzYWxlIGFuZCBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCB0YXggaW1wbGljYXRpb25zIG9mIHRoZSBpbnN0YWxsbWVudCBwYXltZW50cyByZWNlaXZlZC48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBlbWFpbCB0aGVtIHRvIHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbS48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIldvcnRobGVzcyBTZWN1cml0aWVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgeW91IGluZGljYXRlZCB0aGF0IHlvdSBoYXZlIGhhZCBpbnZlc3RtZW50cywgc3VjaCBhcyBzdG9ja3Mgb3IgYm9uZHMsIHRoYXQgYmVjYW1lIGNvbXBsZXRlbHkgd29ydGhsZXNzIHRoaXMgeWVhciwgd2UgbmVlZCB0byBnYXRoZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgcmVwb3J0IHRoZXNlIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgU2VjdXJpdHk6PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgdHlwZSBvZiBlYWNoIHNlY3VyaXR5IHRoYXQgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlB1cmNoYXNlIERldGFpbHM6PC9zdHJvbmc+IERhdGUgb2YgcHVyY2hhc2UgYW5kIHRoZSBwdXJjaGFzZSBwcmljZSBmb3IgZWFjaCBzZWN1cml0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPldvcnRobGVzc25lc3MgRGV0ZXJtaW5hdGlvbiBEYXRlOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSB3aGVuIHlvdSBkZXRlcm1pbmVkIHRoZSBzZWN1cml0eSB0byBiZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgcmVjZWl2ZWQgb3IgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCB0aGUgaW52ZXN0bWVudHMgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkF0dGVtcHRzIHRvIFNlbGwgb3IgVHJhZGU6PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgYW55IGF0dGVtcHRzIG1hZGUgdG8gc2VsbCBvciB0cmFkZSB0aGUgc2VjdXJpdGllcyBiZWZvcmUgZGV0ZXJtaW5pbmcgdGhleSB3ZXJlIHdvcnRobGVzcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBpbnZlc3RtZW50IGFjY291bnQgc3RhdGVtZW50cyBzaG93aW5nIHRoZSB3b3J0aGxlc3Mgc2VjdXJpdGllcyBhbmQgdGhlaXIgdmFsdWUgb3ZlciB0aW1lLCBsZWFkaW5nIHVwIHRvIHRoZWlyIGRlY2xhcmVkIHdvcnRobGVzc25lc3MuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGFjY3VyYXRlIGFuZCB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMjQ0IEJ1c2luZXNzIFN0b2NrXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIHNhbGUgb2Ygc2hhcmVzIGluIGEgc21hbGwgYnVzaW5lc3Mgd2hlcmUgeW91IHdlcmUgYW4gb3JpZ2luYWwgaW52ZXN0b3IuIEFzIHlvdSBpbmRpY2F0ZWQgYSBsb3NzIG9uIHRoaXMgaW52ZXN0bWVudCwgaXQncyBjcnVjaWFsIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBxdWFsaWZpZXMgZm9yIHNwZWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQuIFRvIGFjY3VyYXRlbHkgYW5hbHl6ZSBhbmQgcmVwb3J0IHRoZXNlIGFjdGl2aXRpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz5jZXJ0aWZpY2F0ZSBvZiBpbmNvcnBvcmF0aW9uPC9zdHJvbmc+IG9yIG90aGVyIGRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgc3RvY2sgcXVhbGlmaWVzIGFzIFNlY3Rpb24gMTI0NCBzdG9jay48L2xpPlxyXG4gICAgICAgIDxsaT5BIDxzdHJvbmc+ZGV0YWlsZWQgc3RhdGVtZW50PC9zdHJvbmc+IG9mIHRoZSBpbnZlc3RtZW50LCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgYW5kIGRhdGUgb2YgdGhlIG9yaWdpbmFsIGludmVzdG1lbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OdW1iZXIgb2Ygc2hhcmVzIHB1cmNoYXNlZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIGJlaW5nIGFuIG9yaWdpbmFsIGhvbGRlci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiB0aGUgc2FsZTwvc3Ryb25nPiwgc3BlY2lmeWluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2Ygc2FsZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk51bWJlciBvZiBzaGFyZXMgc29sZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlNhbGUgcHJpY2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgYXNzb2NpYXRlZCBleHBlbnNlcyB3aXRoIHRoZSBzYWxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb3NzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBhIGJlbmVmaWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQsIHBvdGVudGlhbGx5IG1pbmltaXppbmcgeW91ciB0YXhhYmxlIGluY29tZS4gUGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgZmlsaW5nLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZWxhdGVkIFBhcnR5IFRyYW5zYWN0aW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHJlY2VpdmVkIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdlcmUgdHJhbnNhY3Rpb25zIHdpdGggcmVsYXRlZCBwYXJ0aWVzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZXNlIHRyYW5zYWN0aW9ucyBhbmQgaW5jb3Jwb3JhdGUgdGhlbSBpbnRvIHlvdXIgdGF4IGZpbGluZ3MsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbnM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UeXBlIG9mIHRyYW5zYWN0aW9ucyAoZS5nLiwgc2FsZSwgdHJhZGUsIHRyYW5zZmVyIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzKS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRhdGUocykgb2YgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgaXRlbXMgb3IgcHJvcGVydGllcyB0cmFuc2ZlcnJlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGFydGllcyBJbnZvbHZlZDo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk5hbWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIHlvdSAoZS5nLiwgZmFtaWx5IG1lbWJlciwgZnJpZW5kLCBvciBidXNpbmVzcyBlbnRpdHkpLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SWYgYSBidXNpbmVzcyBlbnRpdHkgaXMgaW52b2x2ZWQsIHlvdXIgYW5kIHlvdXIgZmFtaWx5J3Mgb3duZXJzaGlwIHBlcmNlbnRhZ2UgaW4gdGhlIGJ1c2luZXNzLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GaW5hbmNpYWwgRGV0YWlscyBvZiB0aGUgVHJhbnNhY3Rpb25zOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+TWFya2V0IHZhbHVlIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzIGF0IHRoZSB0aW1lIG9mIHRyYW5zYWN0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IHJlY2VpdmVkIG9yIHBhaWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZXhjaGFuZ2Ugb2YgZ29vZHMsIHNlcnZpY2VzLCBvciBvdGhlciBhc3NldHMsIGluY2x1ZGluZyB0aGVpciBmYWlyIG1hcmtldCB2YWx1ZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvcGllcyBvZiBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIG9yIHByb29mIG9mIHBheW1lbnQvZXhjaGFuZ2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BcHByYWlzYWxzIG9yIHZhbHVhdGlvbnMgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyByZWdhcmRpbmcgcmVsYXRlZCBwYXJ0eSB0cmFuc2FjdGlvbnMgYW5kIGF2b2lkaW5nIGFueSBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gVGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTIxIEhvbWUgU2FsZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UgaGF2ZSBzb2xkIHlvdXIgbWFpbiBob21lIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSBleGNsdXNpb24gb2YgZ2FpbiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHNwZWNpZmljIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLiBCZWxvdyBpcyBhIGRldGFpbGVkIGxpc3Qgb2Ygd2hhdCB3ZSBuZWVkIGZyb20geW91OjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgU2FsZTo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBzYWxlPC9saT5cclxuICAgICAgICAgIDxsaT5TZWxsaW5nIHByaWNlPC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgc2VsbGluZyBleHBlbnNlcyAoZS5nLiwgcmVhbCBlc3RhdGUgY29tbWlzc2lvbnMsIGxlZ2FsIGZlZXMsIGV0Yy4pPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db3N0IEJhc2lzIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5EYXRlIG9mIHB1cmNoYXNlPC9saT5cclxuICAgICAgICAgIDxsaT5PcmlnaW5hbCBwdXJjaGFzZSBwcmljZTwvbGk+XHJcbiAgICAgICAgICA8bGk+UmVjb3JkcyBvZiBpbXByb3ZlbWVudHMgbWFkZSAod2l0aCBkYXRlcyBhbmQgY29zdHMpPC9saT5cclxuICAgICAgICAgIDxsaT5BbnkgY2FzdWFsdHkgbG9zc2VzIGNsYWltZWQgYW5kIGluc3VyYW5jZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB3aGlsZSBvd25pbmcgdGhlIHByb3BlcnR5PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3kgYW5kIFVzZSBEYXRhOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5Ub3RhbCB5ZWFycyBvZiBvd25lcnNoaXA8L2xpPlxyXG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBhcyB5b3VyIG1haW4gaG9tZTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHBlcmlvZHMgdGhlIHByb3BlcnR5IHdhcyByZW50ZWQgb3V0IG9yIHVzZWQgZm9yIGJ1c2luZXNzPC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgc3BlY2lhbCBjaXJjdW1zdGFuY2VzIHRoYXQgbWF5IHF1YWxpZnkgZm9yIGFuIGV4Y2VwdGlvbiB0byB0aGUgcGh5c2ljYWwgcHJlc2VuY2UgcmVxdWlyZW1lbnQgKGUuZy4sIGhlYWx0aCBpc3N1ZXMsIGVtcGxveW1lbnQgY2hhbmdlcyk8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIEdhaW4gRXhjbHVzaW9uczo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+SGF2ZSB5b3Ugc29sZCBhbm90aGVyIG1haW4gaG9tZSB3aXRoaW4gdGhlIGxhc3QgdHdvIHllYXJzIGFuZCBjbGFpbWVkIGV4Y2x1c2lvbj88L2xpPlxyXG4gICAgICAgICAgPGxpPklmIHllcywgZGV0YWlscyBvZiB0aGUgcHJpb3Igc2FsZSBpbmNsdWRpbmcgZGF0ZSBhbmQgYW1vdW50IG9mIGdhaW4gZXhjbHVkZWQ8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGZpbGluZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMDMxIEV4Y2hhbmdlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEwMzEgRXhjaGFuZ2VcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBJbiByZXZpZXdpbmcgeW91ciByZWNvcmRzLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IG1heSBoYXZlIGVuZ2FnZWQgaW4gYSBTZWN0aW9uIDEwMzEgZXhjaGFuZ2UuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHJlbGV2YW50IElSUyBndWlkZWxpbmVzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSBhbmQgdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5LiBQbGVhc2UgaW5jbHVkZSBsb2NhdGlvbiwgdHlwZSBvZiBwcm9wZXJ0eSAoZS5nLiwgY29tbWVyY2lhbCwgcmVzaWRlbnRpYWwpLCBhbmQgYW55IGlkZW50aWZ5aW5nIG51bWJlcnMgKGUuZy4sIHBhcmNlbCBudW1iZXIpLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlRyYW5zYWN0aW9uIERhdGVzOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5IHdhcyB0cmFuc2ZlcnJlZCwgYW5kIHRoZSBkYXRlIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eSB3YXMgcmVjZWl2ZWQuIFRoZXNlIGRhdGVzIGFyZSBjcnVjaWFsIHRvIGRldGVybWluZSBjb21wbGlhbmNlIHdpdGggdGhlIDQ1LWRheSBpZGVudGlmaWNhdGlvbiBhbmQgMTgwLWRheSBleGNoYW5nZSBjb21wbGV0aW9uIHJlcXVpcmVtZW50cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBWYWx1ZXM6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBib3RoIHRoZSByZWxpbnF1aXNoZWQgYW5kIHJlcGxhY2VtZW50IHByb3BlcnRpZXMgYXQgdGhlIHRpbWUgb2YgdGhlIGV4Y2hhbmdlLCBhbG9uZyB3aXRoIGFueSBmaW5hbmNpYWwgYWRqdXN0bWVudHMgb3IgYWRkaXRpb25hbCBjYXNoIHJlY2VpdmVkLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBnYWluIG9yIGxvc3MuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+SW50ZXJtZWRpYXJ5IERldGFpbHM6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IGFueSBxdWFsaWZpZWQgaW50ZXJtZWRpYXJ5IHVzZWQgZHVyaW5nIHRoZSBleGNoYW5nZSwgaW5jbHVkaW5nIHRoZWlyIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBkZXRhaWxzIG9mIHRoZWlyIGludm9sdmVtZW50LiBJZiBubyBpbnRlcm1lZGlhcnkgd2FzIHVzZWQsIHBsZWFzZSBleHBsYWluIGhvdyB0aGUgZXhjaGFuZ2Ugd2FzIGZhY2lsaXRhdGVkLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk9yaWdpbmFsIFB1cmNoYXNlIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgb3JpZ2luYWwgcHVyY2hhc2UgcHJpY2UgYW5kIGRhdGUgb2YgYWNxdWlzaXRpb24gZm9yIHRoZSByZWxpbnF1aXNoZWQgcHJvcGVydHkuIFRoaXMgaW5mb3JtYXRpb24gYXNzaXN0cyBpbiBkZXRlcm1pbmluZyB0aGUgYmFzaXMgb2YgdGhlIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBvciBFeHBlbnNlczo8L3N0cm9uZz4gRGV0YWlscyBvZiBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5IHdpdGhpbiB0aGUgZXhjaGFuZ2UgcGVyaW9kIG9yIGFueSBhZGRpdGlvbmFsIGV4cGVuc2VzIGluY3VycmVkIHRoYXQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBwcm9wZXJ0eSdzIGJhc2lzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBldmFsdWF0aW5nIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgU2VjdGlvbiAxMDMxIGV4Y2hhbmdlIGFuZCBlbnN1cmluZyB0aGF0IGFsbCBJUlMgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIEl0IGFsc28gaGVscHMgdXMgdG8gYWR2aXNlIHlvdSBhY2N1cmF0ZWx5IG9uIGFueSBwb3RlbnRpYWwgZGVmZXJyZWQgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhjaGFuZ2UuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLiBXZSBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgbWF5IGhhdmUgdW5kZXJnb25lIGEgU2VjdGlvbiAxMDMzIGV4Y2hhbmdlIChpbnZvbHVudGFyeSBjb252ZXJzaW9uKSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIG1heGltdW0gY29tcGxpYW5jZSBhbmQgYmVuZWZpdCBmb3IgeW91LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIGV2ZW50LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TmF0dXJlIG9mIHRoZSBQcm9wZXJ0eTo8L3N0cm9uZz4gRGVzY3JpYmUgdGhlIHR5cGUgb2YgcHJvcGVydHkgaW52b2x2ZWQgKGUuZy4sIHJlYWwgZXN0YXRlLCBwZXJzb25hbCBwcm9wZXJ0eSwgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBJbnZvbHVudGFyeSBDb252ZXJzaW9uOjwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBjaXJjdW1zdGFuY2VzIHRoYXQgbGVkIHRvIHRoZSBpbnZvbHVudGFyeSBjb252ZXJzaW9uIChlLmcuLCBuYXR1cmFsIGRpc2FzdGVyLCB0aGVmdCwgY29uZGVtbmF0aW9uKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluc3VyYW5jZSBQcm9jZWVkcyBSZWNlaXZlZDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGFtb3VudCBvZiBhbnkgaW5zdXJhbmNlIHByb2NlZWRzIHJlY2VpdmVkIGFzIGNvbXBlbnNhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZWludmVzdG1lbnQgb2YgUHJvY2VlZHM6PC9zdHJvbmc+IERldGFpbCBhbnkgcmVpbnZlc3RtZW50IG9mIHRoZSBwcm9jZWVkcyBpbnRvIHNpbWlsYXIgcHJvcGVydHksIGluY2x1ZGluZyB0eXBlcyBvZiBwcm9wZXJ0aWVzIGFjcXVpcmVkLCBkYXRlcyBvZiBhY3F1aXNpdGlvbiwgYW5kIGFtb3VudHMgcmVpbnZlc3RlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRpbWVsaW5lIG9mIEV2ZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhIHRpbWVsaW5lIG9mIHRoZSBrZXkgZXZlbnRzLCBmcm9tIHRoZSBkYXRlIG9mIHRoZSBpbnZvbHVudGFyeSBjb252ZXJzaW9uIHRvIHRoZSByZWludmVzdG1lbnQgb2YgcHJvY2VlZHMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBpbnN1cmFuY2Ugc2V0dGxlbWVudCBzdGF0ZW1lbnRzLCBwdXJjaGFzZSBjb250cmFjdHMgZm9yIHJlcGxhY2VtZW50IHByb3BlcnR5LCBvciBvZmZpY2lhbCBub3RpY2VzIG9mIGNvbmRlbW5hdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSB0byBmYWNpbGl0YXRlIGFuIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gV2UncmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtaWdodCBoYXZlIHJlZ2FyZGluZyB0aGlzIHJlcXVlc3QuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+SSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheGVzLCB3ZSBub3RpY2VkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgcmVudGFsIGluY29tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGV4cGxvcmUgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgbmVlZCBzb21lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgcmVudGFsIGluY29tZS48L3A+XHJcbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbjxvbD5cclxuICA8bGk+VGhlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IGdlbmVyYXRpbmcgdGhlIHJlbnRhbCBpbmNvbWUuPC9saT5cclxuICA8bGk+VG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgPGxpPk1vbnRocyB0aGUgcHJvcGVydHkgd2FzIHJlbnRlZCBvdXQuPC9saT5cclxuICA8bGk+QW55IHBlcmlvZHMgb2YgcGVyc29uYWwgdXNlIG9mIHRoZSByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICA8bGk+QSBzdW1tYXJ5IG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBwcm9wZXJ0eSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogcHJvcGVydHkgbWFuYWdlbWVudCBmZWVzLCBtYWludGVuYW5jZSBhbmQgcmVwYWlycywgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgYW5kIG1vcnRnYWdlIGludGVyZXN0IChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gIDxsaT5EZXRhaWxzIG9mIGFueSBtYWpvciBpbXByb3ZlbWVudHMgb3IgcmVub3ZhdGlvbnMgZG9uZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIHBhaW50IGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB5b3VyIHJlbnRhbCBpbmNvbWUsIGFsbG93aW5nIHVzIHRvIGVuc3VyZSB3ZSB0YWtlIGFkdmFudGFnZSBvZiBhbnkgYXBwbGljYWJsZSBkZWR1Y3Rpb25zIGFuZCBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcnVjaWFsIGZvciB0aGUgdGltZWx5IGFuZCBlZmZlY3RpdmUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRzLjwvcD5cclxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgaWYgdGhlcmUncyBhbnkgb3RoZXIgd2F5IEkgY2FuIGFzc2lzdCwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGdldCBpbiB0b3VjaC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWR2YW5jZWQgUmVudFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWR2YW5jZWQgUmVudFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCByZWNlaXZpbmcgYWR2YW5jZWQgcmVudCBwYXltZW50cyB0aGlzIHllYXIgZm9yIHlvdXIgcmVudGFsIHByb3BlcnR5LiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIGFkdmFuY2VkIHJlbnQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSBzdW0gdG90YWwgb2YgYWxsIHJlbnQgcGF5bWVudHMgcmVjZWl2ZWQgaW4gYWR2YW5jZSAoY292ZXJpbmcgZnV0dXJlIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IG1vbnRoKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUocykgb2YgcmVjZWlwdDo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZXNlIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgcGVyaW9kIGNvdmVyZWQ6PC9zdHJvbmc+IFRoZSByYW5nZSBvZiBkYXRlcyAoc3RhcnQgYW5kIGVuZCkgdGhhdCBlYWNoIGFkdmFuY2VkIHJlbnQgcGF5bWVudCBjb3ZlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBhZGRyZXNzOjwvc3Ryb25nPiBUaGUgYWRkcmVzcyBvZiB0aGUgcmVudGFsIHByb3BlcnR5IGZvciB3aGljaCB0aGUgYWR2YW5jZWQgcmVudCB3YXMgcGFpZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxlYXNlIGFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBsZWFzZSBhZ3JlZW1lbnQocykgd2l0aCB0aGUgdGVuYW50KHMpIHRoYXQgc3BlY2lmaWVzIHRoZSB0ZXJtcyBvZiB0aGUgYWR2YW5jZWQgcmVudCBwYXltZW50KHMpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IHBhcnRpYWwgcmVmdW5kcyBpc3N1ZWQ6PC9zdHJvbmc+IElmIGFueSByZWZ1bmRzIHdlcmUgaXNzdWVkIGFnYWluc3QgdGhlIGFkdmFuY2VkIHJlbnRzIHJlY2VpdmVkLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxzIGFuZCByZXNwZWN0aXZlIGFtb3VudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHBpdm90YWwgaW4gZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGlhbnQgd2l0aCByZWxldmFudCB0YXggbGF3cy4gUGxlYXNlIGVuc3VyZSB0aGUgZGV0YWlscyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMZWFzZSBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCBpbiB5b3VyIHByZWxpbWluYXJ5IHRheCBpbmZvcm1hdGlvbiB0aGF0IHlvdSByZWNlaXZlZCBwYXltZW50IGZyb20gYSB0ZW5hbnQgZm9yIGVhcmx5IGxlYXNlIGNhbmNlbGxhdGlvbi4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBhbmQgYXNzZXNzIGFueSB0YXggaW1wbGljYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkxlYXNlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBsZWFzZSBhZ3JlZW1lbnQgd2l0aCB0aGUgdGVuYW50IHdobyBwYWlkIHRvIHRlcm1pbmF0ZSB0aGVpciBsZWFzZSBlYXJseS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5BbWVuZG1lbnQgb3IgVGVybWluYXRpb24gQWdyZWVtZW50Ojwvc3Ryb25nPiBBbnkgZG9jdW1lbnRzIHRoYXQgZm9ybWFsbHkgYWNrbm93bGVkZ2UgdGhlIGVhcmx5IHRlcm1pbmF0aW9uIG9mIHRoZSBsZWFzZSwgaW5jbHVkaW5nIGFueSBwZW5hbHRpZXMsIHRoZSB0ZXJtaW5hdGlvbiBkYXRlLCBhbmQgb3RoZXIgcmVsZXZhbnQgdGVybXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIHRoZSBwYXltZW50IHJlY2VpdmVkIGZvciBsZWFzZSB0ZXJtaW5hdGlvbi4gVGhpcyBjb3VsZCBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSB0cmFuc2FjdGlvbiwgYSByZWNlaXB0IHByb3ZpZGVkIHRvIHRoZSB0ZW5hbnQsIG9yIGFueSB3cml0dGVuIGFncmVlbWVudCBzcGVjaWZ5aW5nIHRoZSBhbW91bnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tbXVuaWNhdGlvbiBFdmlkZW5jZTo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGNvbW11bmljYXRpb24gYmV0d2VlbiB5b3UgYW5kIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gYW5kIHRoZSBhZ3JlZW1lbnQgdG8gdGVybWluYXRlIGVhcmx5LCBpbmNsdWRpbmcgZW1haWxzIG9yIGxldHRlcnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGVzZSBkb2N1bWVudHMgYXJlIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHRheCB0cmVhdG1lbnQgb2YgdGhlIGxlYXNlIGNhbmNlbGxhdGlvbiBwYXltZW50IHlvdSByZWNlaXZlZC4gVGhleSB3aWxsIGhlbHAgdG8gZW5zdXJlIHRoYXQgd2UgcmVwb3J0IHlvdXIgaW5jb21lIGFjY3VyYXRlbHkgYW5kIHRha2UgYWR2YW50YWdlIG9mIGFueSBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cy48L3A+XHJcbiAgICA8cD48c3Ryb25nPkFjdGlvbiBSZXF1aXJlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tLCBvciB1cGxvYWQgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhaWQgQWR2YW5jZSBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcywgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBwYXltZW50cyBmb3IgaW5zdXJhbmNlIHByZW1pdW1zIG9yIHNpbWlsYXIgY29zdHMgcmVsYXRlZCB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSwgd2hpY2ggY292ZXIgcGVyaW9kcyBiZXlvbmQgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcHJlcGFpZCBleHBlbnNlcyBpbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBQYWlkIEV4cGVuc2VzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMgc2hvd2luZyB0aGUgcGF5bWVudCBvZiBpbnN1cmFuY2UgcHJlbWl1bXMgb3Igc2ltaWxhciBleHBlbnNlcy4gVGhpcyBzaG91bGQgY2xlYXJseSBpbmRpY2F0ZSB0aGUgYW1vdW50IHBhaWQsIHRoZSBkYXRlIG9mIHBheW1lbnQsIGFuZCB0aGUgY292ZXJhZ2UgcGVyaW9kLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+Q292ZXJhZ2UgUGVyaW9kIERldGFpbHM6PC9zdHJvbmc+IFdlIG5lZWQgc3BlY2lmaWMgZGV0YWlscyByZWdhcmRpbmcgdGhlIGNvdmVyYWdlIHBlcmlvZCBmb3IgZWFjaCBleHBlbnNlLiBQbGVhc2UgaW5jbHVkZSBkb2N1bWVudGF0aW9uIG9yIGEgd3JpdHRlbiBzdW1tYXJ5IHRoYXQgc3BlY2lmaWVzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSBjb3ZlcmFnZSBwZXJpb2RzIHRoYXQgZXh0ZW5kIGJleW9uZCB0aGUgY3VycmVudCB5ZWFyLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+UHJvcGVydHkgSW5mb3JtYXRpb246PC9zdHJvbmc+IENvbmZpcm0gdGhlIGFkZHJlc3Mgb3IgaWRlbnRpZmljYXRpb24gb2YgdGhlIHJlbnRhbCBwcm9wZXJ0eShpZXMpIHRvIHdoaWNoIHRoZXNlIGV4cGVuc2VzIGFwcGx5LjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+UHVycG9zZSBvZiB0aGUgRXhwZW5zZTo8L3N0cm9uZz4gRm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIHByb3ZpZGUgYSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgbmF0dXJlIG9mIGVhY2ggZXhwZW5zZSAoZS5nLiwgcHJvcGVydHkgaW5zdXJhbmNlLCBsaWFiaWxpdHkgaW5zdXJhbmNlKS48L2xpPlxyXG48L29sPlxyXG48cD5QbGVhc2UgcmVtZW1iZXIgdGhhdCBoYXZpbmcgYWNjdXJhdGUgYW5kIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiB3aWxsIGFpZCBpbiBlbnN1cmluZyB0aGF0IHlvdXIgdGF4IHJldHVybnMgYXJlIHByZXBhcmVkIGNvcnJlY3RseSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byB0YXggYmVuZWZpdHMgcmVsYXRlZCB0byB0aGVzZSBwcmVwYWlkIGV4cGVuc2VzLjwvcD5cclxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgbmVjZXNzYXJ5IGRvY3VtZW50cyBmb3IgdGF4IHByZXBhcmF0aW9uLiBcclxuICAgIEFzIHBlciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgcGF5bWVudCBmb3IgbG9jYWwgaW1wcm92ZW1lbnRzIFxyXG4gICAgb3Igc2VydmljZXMgdGhhdCBkaXJlY3RseSBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgeW91ciByZW50YWwgcHJvcGVydHksIFxyXG4gICAgd2UgbmVlZCBmdXJ0aGVyIGRldGFpbHMgdG8gZW5zdXJlIHRoZSBhY2N1cmF0ZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50YXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2UgcHJvdmlkZWQgKGUuZy4sIHN0cmVldCByZXBhaXJzLCBuZXcgc2lkZXdhbGtzKS48L2xpPlxyXG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlLjwvbGk+XHJcbiAgICAgICAgPGxpPlRvdGFsIGNvc3QgYXNzb2NpYXRlZCB3aXRoIGVhY2ggaW1wcm92ZW1lbnQgb3Igc2VydmljZS48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBwYXltZW50IGZvciB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSAocmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+QW55IG9mZmljaWFsIG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBsb2NhbCBtdW5pY2lwYWxpdHkgcmVnYXJkaW5nIHRoZSBpbXByb3ZlbWVudHMgb3IgY2hhcmdlcy48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIGhvdyB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSBzcGVjaWZpY2FsbHkgYmVuZWZpdGVkIHlvdXIgcmVudGFsIHByb3BlcnR5LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0eSB2YWx1ZSBpbmNyZWFzZXMgZHVlIHRvIGxvY2FsIGltcHJvdmVtZW50cyBvciBzZXJ2aWNlcy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBmYWNpbGl0YXRlIHRoZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudGF0aW9uLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmZlaXRlZCBTZWN1cml0eSBEZXBvc2l0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxpYW50LCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBoYXZpbmcgb25lIG9yIG1vcmUgdGVuYW50cyB3aG8gZGlkIG5vdCBnZXQgdGhlaXIgc2VjdXJpdHkgZGVwb3NpdCBiYWNrIHRoaXMgeWVhciBkdWUgdG8gZWl0aGVyIGJyZWFraW5nIHRoZSBsZWFzZSB0ZXJtcyBvciBsZWF2aW5nIGRhbWFnZSByZXF1aXJpbmcgcmVwYWlyLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BIGxpc3Qgb2YgZWFjaCB0ZW5hbnQgd2hvc2Ugc2VjdXJpdHkgZGVwb3NpdCB3YXMgZm9yZmVpdGVkLCBpbmNsdWRpbmc6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VGVuYW50J3MgbmFtZTwvbGk+XHJcbiAgICAgICAgICA8bGk+UmVudGFsIGFkZHJlc3M8L2xpPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2YgbGVhc2UgdGVybWluYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIGNvbW11bmljYXRpb24gZXZpZGVuY2luZyB0aGUgZm9yZmVpdHVyZSByZWFzb24sIHN1Y2ggYXM6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50IHNob3dpbmcgdGhlIGJyZWFjaGVkIHRlcm1zPC9saT5cclxuICAgICAgICAgIDxsaT5QaG90b3Mgb3IgcmVwYWlyIGludm9pY2VzIGZvciBkYW1hZ2VzIGNhdXNlZCBieSB0aGUgdGVuYW50PC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgd3JpdHRlbiBub3RpY2VzIHByb3ZpZGVkIHRvIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBmb3JmZWl0dXJlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBlYWNoIGZvcmZlaXRlZCBzZWN1cml0eSBkZXBvc2l0LjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHJlYXNvbnMgZm9yIHNlY3VyaXR5IGRlcG9zaXQgZm9yZmVpdHVyZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhpcyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBpbiBhIGNsZWFyIGFuZCBvcmdhbml6ZWQgbWFubmVyIHRvIGZhY2lsaXRhdGUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uLUNhc2ggUmVudFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uLUNhc2ggUmVudFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2Ugbm90ZSBmcm9tIHlvdXIgZWFybGllciByZXNwb25zZXMgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBub24tY2FzaCBmb3JtcyBvZiBwYXltZW50IGluIGxpZXUgb2YgcmVudCB0aGlzIHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZXNlIHRyYW5zYWN0aW9ucy4gS2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBTZXJ2aWNlIG9yIEdvb2RzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgeW91IHJlY2VpdmVkIGFzIHJlbnQgcGF5bWVudC4gRm9yIGluc3RhbmNlLCBcIlJlcGFpciBzZXJ2aWNlcyBmb3IgdGhlIGtpdGNoZW4gcGx1bWJpbmdcIiBvciBcImEgbGFwdG9wIGNvbXB1dGVyXCIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlZhbHVlIEVzdGltYXRpb246PC9zdHJvbmc+IEFuIGVzdGltYXRlZCB2YWx1ZSBvZiB0aGUgc2VydmljZSwgZ29vZHMsIG9yIHByb3BlcnR5IHJlY2VpdmVkIGF0IHRoZSB0aW1lIG9mIHRoZSB0cmFuc2FjdGlvbi4gSWYgcG9zc2libGUsIGluY2x1ZGUgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGlzIHZhbHVhdGlvbiwgc3VjaCBhcyByZWNlaXB0cywgaW52b2ljZXMsIG9yIHdyaXR0ZW4gYWdyZWVtZW50cy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGF0ZShzKSBvZiBUcmFuc2FjdGlvbjo8L3N0cm9uZz4gU3BlY2lmaWMgZGF0ZShzKSB3aGVuIHlvdSByZWNlaXZlZCB0aGVzZSBnb29kcyBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW5mb3JtYXRpb24gYWJvdXQgdGhlIFRlbmFudCBvciBQcm92aWRlcjo8L3N0cm9uZz4gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGFncmVlbWVudHMgb3IgY29udHJhY3RzIHRoYXQgb3V0bGluZSB0aGlzIGFycmFuZ2VtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWNlaXB0cyBvciBEb2N1bWVudGF0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbjo8L3N0cm9uZz4gQW55IHJlY2VpcHRzLCBpbnZvaWNlcywgb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB0aGUgZXhjaGFuZ2UuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgYWNjdXJhdGVseSByZWZsZWN0aW5nIHlvdXIgaW5jb21lLiBZb3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBncmVhdGx5IGFzc2lzdCBpbiBjb21wbGV0aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBhY2NvdW50cywgd2UndmUgbm90ZWQgdGhhdCBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkIGFzIHBhcnQgb2YgdGhlaXIgdGF4IHRyZWF0bWVudCBpbiBvdXIgZmluYW5jaWFsIHJlY29yZHMuIFRoaXMgbWV0aG9kIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlIGZpbmFuY2lhbCByZXBvcnRpbmcgYW5kIHRheCBlZmZpY2llbmN5LiBIb3dldmVyLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgdGhlcmUgbWF5IGJlIGRpc2NyZXBhbmNpZXMgb3IgdXBkYXRlcyByZXF1aXJlZCBpbiBvdXIgcmVjb3JkcyByZWdhcmRpbmcgdGhlIGRlcHJlY2lhdGlvbiBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzLjwvcD5cclxuICAgIDxwPlRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIGZpbmFuY2lhbCBhbmQgdGF4IHJlcG9ydGluZywgd2Uga2luZGx5IHJlcXVlc3QgeW91ciBhc3Npc3RhbmNlIGluIHZlcmlmeWluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgeW91ciByZW50YWwgcHJvcGVydGllcyB3aXRoIHJlZ2FyZHMgdG8gZGVwcmVjaWF0aW9uLjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT5Db25maXJtIHdoZXRoZXIgYWxsIHlvdXIgcmVudGFsIHByb3BlcnRpZXMgYXJlIGJlaW5nIGRlcHJlY2lhdGVkIGluIG91ciBib29rcy4gSWYgdGhpcyBpcyBhY2N1cmF0ZSwgbm8gYWN0aW9uIGlzIHJlcXVpcmVkIG9uIHlvdXIgcGFydC48L2xpPlxyXG4gICAgPGxpPklmIHRoZXJlIGFyZSBhbnkgcmVudGFsIHByb3BlcnRpZXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggcHJvcGVydHk6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxsaT5Qcm9wZXJ0eSBBZGRyZXNzPC9saT5cclxuICAgICAgICAgICAgPGxpPkRhdGUgb2YgUHVyY2hhc2U8L2xpPlxyXG4gICAgICAgICAgICA8bGk+UHVyY2hhc2UgUHJpY2U8L2xpPlxyXG4gICAgICAgICAgICA8bGk+UmVhc29uIGZvciBOb24tRGVwcmVjaWF0aW9uPC9saT5cclxuICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYW5kIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3VyIGZpbmFuY2lhbCByZWNvcmRzIGFjY3VyYXRlbHkgcmVmbGVjdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhbmQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgZm9yIHJldmlzaW9ucyBhbmQgdXBkYXRlcyBhcyBuZWNlc3NhcnkuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBXZSBhcmUgaGVyZSB0byBzdXBwb3J0IHlvdSBpbiBtYWludGFpbmluZyBwcmVjaXNlIGFuZCBjb21wbGlhbnQgZmluYW5jaWFsIHJlY29yZHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBjb250aW51ZWQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUmVwYWlyc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFJlcGFpcnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgbWFraW5nIG5lY2Vzc2FyeSByZXBhaXJzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRvIGtlZXAgaXQgaW4gZ29vZCB3b3JraW5nIGNvbmRpdGlvbi4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgZXhwZW5zZXMgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFsbCByZXBhaXJzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhci4gUGxlYXNlIGluY2x1ZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgbmF0dXJlIG9mIGVhY2ggcmVwYWlyIChlLmcuLCBmaXhpbmcgbGVha3MsIHBhaW50aW5nLCByZXBhaXJpbmcgYXBwbGlhbmNlcykuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBlYWNoIHJlcGFpciB3YXMgY29tcGxldGVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGxvY2F0aW9uL2FkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IHdoZXJlIHJlcGFpcnMgd2VyZSBtYWRlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIGVhY2ggcmVwYWlyIG1hZGUuIFRoaXMgc2hvdWxkIGluY2x1ZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgc2VydmljZSBwcm92aWRlcuKAmXMgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgcGFpZCBmb3IgZWFjaCByZXBhaXIuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3JrIHBlcmZvcm1lZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBtZXRob2Qgb2YgcGF5bWVudCB1c2VkLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+SWYgYW55IHJlcGFpcnMgd2VyZSBtYWRlIGJ5IHlvdXJzZWxmIG9yIGFuIHVubGljZW5zZWQgY29udHJhY3RvciwgcGxlYXNlIHByb3ZpZGU6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3JrIHBlcmZvcm1lZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBjb3N0IG9mIG1hdGVyaWFscyBwdXJjaGFzZWQsIHN1cHBvcnRlZCBieSByZWNlaXB0cy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIGhvdXJzIHNwZW50IG9uIGVhY2ggcmVwYWlyLCBhbG9uZyB3aXRoIGEgcmVhc29uYWJsZSBob3VybHkgcmF0ZSBmb3IgbGFib3IuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgYWNjdXJhdGUgYW5kIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBvcHRpbWl6ZSB5b3VyIHRheCBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gcHJvcGVydHkgcmVwYWlyIGV4cGVuc2VzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIG5lZWRlZCwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSd2ZSBtYWRlIHVwZ3JhZGVzIG9yIGVuaGFuY2VtZW50cyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGluY29ycG9yYXRlIHRoZXNlIGltcHJvdmVtZW50cyBpbnRvIHlvdXIgdGF4IGRvY3VtZW50YXRpb24sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBJbXByb3ZlbWVudDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHVwZ3JhZGUgb3IgZW5oYW5jZW1lbnQgbWFkZSB0byB0aGUgcHJvcGVydHkuIFRoaXMgY291bGQgaW5jbHVkZSByZW5vdmF0aW9ucywgYWRkaXRpb25zLCBvciBhbnkgdXBncmFkZXMgdGhhdCBoYXZlIGluY3JlYXNlZCBpdHMgdmFsdWUsIGV4dGVuZGVkIGl0cyBsaWZlc3Bhbiwgb3IgYWRhcHRlZCBpdCB0byBuZXcgdXNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIEltcHJvdmVtZW50czo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgd2hlbiB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgc3RhcnRlZCBhbmQgY29tcGxldGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHMgSW52b2x2ZWQ6PC9zdHJvbmc+IERldGFpbGVkIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBpbXByb3ZlbWVudCBwcm9qZWN0LiBUaGlzIGluY2x1ZGVzIG1hdGVyaWFscywgbGFib3IsIHBlcm1pdHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29zdHMuIFBsZWFzZSBwcm92aWRlIGl0ZW1pemVkIHJlY2VpcHRzIG9yIGludm9pY2VzIGlmIGF2YWlsYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFBheW1lbnQ6PC9zdHJvbmc+IENvcGllcyBvZiBjYW5jZWxsZWQgY2hlY2tzLCBiYW5rIHN0YXRlbWVudHMsIG9yIGVsZWN0cm9uaWMgcGF5bWVudCBjb25maXJtYXRpb25zIHRoYXQgcHJvdmUgcGF5bWVudCBmb3IgdGhlIGltcHJvdmVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJlZm9yZSBhbmQgQWZ0ZXIgUGljdHVyZXM6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgcGhvdG9ncmFwaHMgb2YgdGhlIHByb3BlcnR5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGltcHJvdmVtZW50cyB3ZXJlIG1hZGUuIFRoaXMgaGVscHMgaW4gc3Vic3RhbnRpYXRpbmcgdGhlIGVuaGFuY2VtZW50IHRvIHlvdXIgcHJvcGVydHkncyB2YWx1ZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyYWN0b3IgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGNvbnRyYWN0b3JzIHdlcmUgdXNlZCwgcGxlYXNlIHByb3ZpZGUgdGhlaXIgYnVzaW5lc3MgbmFtZXMsIGFkZHJlc3NlcywgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgY29tcHV0aW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBiZW5lZml0cyB0aGF0IG1heSBiZSBhcHBsaWNhYmxlIHRvIHlvdSBhcyBhIHJlc3VsdCBvZiB0aGVzZSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMuIFBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgZ2F0aGVyZWQgYW5kIHN1Ym1pdHRlZCBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJucy48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEFjdGl2aXR5IFBhcnRpY2lwYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBBY3Rpdml0eSBQYXJ0aWNpcGF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSBtb3ZlIGZvcndhcmQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiwgaXQgaGFzIGJlY29tZSBuZWNlc3NhcnkgdG8gY29sbGVjdCBhIGJpdCBtb3JlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGFjdGl2ZSBwYXJ0aWNpcGF0aW9uIGluIHJlbnRhbCBwcm9wZXJ0eSBhY3Rpdml0aWVzLiBUaGlzIGlzIGNydWNpYWwgZm9yIHBhc3Npbmcgc3BlY2lmaWMgdGF4IHRlc3RzIHRoYXQgYXBwbHkgdG8gaW5kaXZpZHVhbHMgYWN0aXZlbHkgaW52b2x2ZWQgaW4gdGhlaXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGRldGFpbHMgdG8gZW5zdXJlIHdlIG1lZXQgYWxsIHJlcXVpcmVtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHlvdXIgYWN0aXZlIHJvbGVzIHRoaXMgdGF4IHllYXIuIFRoaXMgaW5jbHVkZXMgbWFraW5nIGRlY2lzaW9ucyBzdWNoIGFzIGFwcHJvdmluZyBuZXcgdGVuYW50cywgc2V0dGluZyByZW50YWwgdGVybXMsIG9yIGF1dGhvcml6aW5nIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZSBTcGVudDo8L3N0cm9uZz4gQW4gZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyB5b3UgcGVyc29uYWxseSBzcGVudCBvbiBhY3Rpdml0aWVzIHJlbGF0ZWQgdG8gdGhlIG1hbmFnZW1lbnQgYW5kIGRlY2lzaW9uLW1ha2luZyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlY2lzaW9uIFJlY29yZHM6PC9zdHJvbmc+IEFueSBhdmFpbGFibGUgcmVjb3JkcyBvciBjb3JyZXNwb25kZW5jZSB0aGF0IHNob3djYXNlIHlvdXIgaW52b2x2ZW1lbnQgaW4ga2V5IGRlY2lzaW9ucyAoZS1tYWlscywgc2lnbmVkIGRvY3VtZW50cywgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBNYW5hZ2VtZW50IEVuZ2FnZW1lbnQ6PC9zdHJvbmc+IElmIHlvdSd2ZSBlbmdhZ2VkIHdpdGggYSBwcm9wZXJ0eSBtYW5hZ2VyLCBhIGRlc2NyaXB0aW9uIG9mIHRoZWlyIHJvbGUgdmVyc3VzIHRoZSB0YXNrcyB5b3UgcGVyc29uYWxseSBoYW5kbGUgd291bGQgYmUgaGVscGZ1bC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2Ugc3BlY2lmaWNzIHdpbGwgZ3JlYXRseSBmYWNpbGl0YXRlIHRoZSBhY2N1cmF0ZSBhbmQgYWR2YW50YWdlb3VzIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIHJlZ2FyZGluZyByZW50YWwgYWN0aXZpdGllcy4gSWYgdGhlcmUgYXJlIGFueSBhc3BlY3RzIG9mIHRoaXMgcmVxdWVzdCB0aGF0IHJlcXVpcmUgY2xhcmlmaWNhdGlvbiwgb3IgaWYgYXNzaXN0YW5jZSBpcyBuZWVkZWQsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlYWwgRXN0YXRlIFByb2Zlc3Npb25hbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB5b3UndmUgc3BlbnQgbW9yZSB0aGFuIGhhbGYgb2YgeW91ciB3b3JraW5nIHRpbWUgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcyB0aGlzIHRheCB5ZWFyLiBUbyBwcm9wZXJseSBldmFsdWF0ZSB5b3VyIGVsaWdpYmlsaXR5IGZvciB0YXggYmVuZWZpdHMgYXMgYSBSZWFsIEVzdGF0ZSBQcm9mZXNzaW9uYWwsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgQW5udWFsIFdvcmtpbmcgSG91cnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgc3VtbWFyeSBvZiB5b3VyIHRvdGFsIHdvcmtpbmcgaG91cnMgdGhpcyB5ZWFyLCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgaG91cnMgZGVkaWNhdGVkIHRvIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlYWwgRXN0YXRlIEFjdGl2aXRpZXM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gc3VjaCBhcyBjb250cmFjdHMsIGVuZ2FnZW1lbnQgbGV0dGVycywgb3IgY2xpZW50IGludm9pY2VzIHRoYXQgcHJvdmUgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgKGUuZy4sIHNhbGVzLCBsZWFzaW5nLCBtYW5hZ2VtZW50KS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+TGlzdCBvZiBQcm9wZXJ0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb2YgcHJvcGVydGllcyB5b3UgaGF2ZSBtYW5hZ2VkLCBzb2xkLCBvciBhcmUgY3VycmVudGx5IHNlbGxpbmcsIGluY2x1ZGluZyB0aGVpciBsb2NhdGlvbiBhbmQgdGhlIG5hdHVyZSBvZiB5b3VyIGludm9sdmVtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBKb2IgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgb3V0bGluZSBvZiB5b3VyIHJvbGUocykgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcywgc3BlY2lmeWluZyB3aGV0aGVyIHlvdXIgaW52b2x2ZW1lbnQgaXMgcHJpbWFyaWx5IGFzIGEgYnJva2VyLCBhZ2VudCwgcHJvcGVydHkgbWFuYWdlciwgZXRjLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBMaWNlbnNlcyBvciBDZXJ0aWZpY2F0aW9uczo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSBsaWNlbnNlcyBvciBjZXJ0aWZpY2F0aW9ucyB0aGF0IHZhbGlkYXRlIHlvdXIgcHJvZmVzc2lvbmFsIHN0YXR1cyBpbiB0aGUgcmVhbCBlc3RhdGUgc2VjdG9yLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5DYWxlbmRhciBvciBTY2hlZHVsZTo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBhIGNhbGVuZGFyIG9yIHNjaGVkdWxlIHJlZmxlY3RpbmcgeW91ciByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIHRocm91Z2hvdXQgdGhlIHllYXIgdG8gaGVscCBjb3Jyb2JvcmF0ZSB0aGUgdGltZSBzcGVudCBpbiB0aGVzZSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgc2VudCB0byB1cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGF2b2lkIGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFJlbnRhbCBQcm9wZXJ0eVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyBrbm93IHRoYXQgeW91IHJlbnRlZCBvdXQgYSBwb3J0aW9uIG9mIHlvdXIgcHJvcGVydHkgdGhpcyB0YXggeWVhciB3aGlsZSB1c2luZyB0aGUgcmVzdCBmb3IgcGVyc29uYWwgcHVycG9zZXMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGJlc3QgdGF4IGFkdmFudGFnZXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBwYXJ0aWFsIHJlbnRhbCBwcm9wZXJ0eTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvbXBsZXRlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIHJlbnRlZCBwb3J0aW9uIGFuZCB0aGUgcGVyc29uYWwgdXNlIHBvcnRpb24uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3B5IG9mIHRoZSByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+U3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgcmVudGFsIHBlcmlvZCB3aXRoaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgSW5jb21lOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgcmVudGFsIGluY29tZSByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgYWR2YW5jZSByZW50IG9yIHNlY3VyaXR5IGRlcG9zaXRzIG5vdCByZXR1cm5lZCB0byB0aGUgdGVuYW50LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBleHBlbnNlcyBmb3IgdGhlIHJlbnRhbCBwcm9wZXJ0eSwgaW5jbHVkaW5nIHJlcGFpcnMsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBhbmQgcHJvcGVydHkgdGF4ZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBleHBlbnNlcyBzaGFyZWQgYmV0d2VlbiB0aGUgcmVudGFsIGFuZCBwZXJzb25hbCB1c2UgcG9ydGlvbnMsIGFuZCBob3cgdGhleSBhcmUgZGl2aWRlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VXNlIG9mIFByb3BlcnR5Ojwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgbnVtYmVyIG9mIGRheXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Ub3RhbCBudW1iZXIgb2YgZGF5cyByZW50ZWQgYXQgZmFpciByZW50YWwgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgUmVwYWlyczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBvciByZXBhaXJzIG1hZGUgc3BlY2lmaWNhbGx5IGluIHRoZSByZW50YWwgcG9ydGlvbiBhbmQgdGhlIGNvc3QgaW52b2x2ZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoaXMgaW5mb3JtYXRpb24gYXJlIGNydWNpYWwgZm9yIGNvcnJlY3QgdGF4IGZpbGluZyBhbmQgb3B0aW1pemluZyB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zIGFuZCB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+RG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHVzaW5nIHlvdXIgcmVudGFsIHByb3BlcnR5IGZvciBwZXJzb25hbCBwdXJwb3NlcyBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRheXMgZHVyaW5nIHRoZSB0YXggeWVhciB3aGVuIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBieSB5b3UsIHlvdXIgZmFtaWx5LCBvciBmcmllbmRzIHdpdGhvdXQgY2hhcmdpbmcgcmVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGRheXMgcmVudGVkIGF0IGZhaXIgcmVudGFsIHByaWNlOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBudW1iZXIgb2YgZGF5cyB0aGUgcHJvcGVydHkgd2FzIGFjdHVhbGx5IHJlbnRlZCBvdXQgdG8gdGVuYW50cyBhdCBhIGZhaXIgcmVudGFsIHByaWNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIGluY29tZSByZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgdG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBleHBlbnNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGV4cGVuc2VzIGluY3VycmVkIGZvciB0aGUgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYWR2ZXJ0aXNpbmcsIGNsZWFuaW5nIGFuZCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIHByb3BlcnR5IHRheGVzLCBtb3J0Z2FnZSBpbnRlcmVzdCwgYW5kIGFueSByZXBhaXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIGFuZCBkYXRlczo8L3N0cm9uZz4gTGlzdCBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5IGR1cmluZyB0aGUgdGF4IHllYXIsIGFsb25nIHdpdGggdGhlIGRhdGUgb2YgaW1wcm92ZW1lbnQgYW5kIHRoZSBjb3N0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IFN0YXRlbWVudCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50Ojwvc3Ryb25nPiBBdHRhY2ggYSBjb3B5IG9mIHlvdXIgYW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnQgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudCBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgZW5hYmxlIHVzIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHBvcnRpb24gb2YgZXhwZW5zZXMgdGhhdCBjYW4gYmUgZGVkdWN0ZWQgYW5kIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvdW50cyBhcyBwZXJzb25hbCB1c2UgdmVyc3VzIHJlbnRhbCB1c2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+ICBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhcnRpYWwgUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCByZW50aW5nIG91dCBwYXJ0IG9mIHlvdXIgcHJvcGVydHkgZm9yIHByb2ZpdCwgd2hpbGUgYWxzbyB1c2luZyBpdCBpbiBhIG1hbm5lciB0aGF0IG1heSBjbGFzc2lmeSBpdCBhcyB5b3VyIHJlc2lkZW5jZS4gVG8gYWNjdXJhdGVseSBjYXB0dXJlIGFsbCBpbmZvcm1hdGlvbiBhbmQgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudC9MZWFzZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlIHRoYXQgc3BlY2lmaWVzIHRoZSB0ZXJtcywgcmVudGFsIHBlcmlvZCwgYW5kIHBheW1lbnQgZGV0YWlscy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZW50YWwgSW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IFJlY2VpcHRzIGFuZCByZWNvcmRzIG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZXBhaXJzLCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIGFuZCBwcm9wZXJ0eSBtYW5hZ2VtZW50IGZlZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgVXNlIERldGFpbHM6PC9zdHJvbmc+IEEgbG9nIG9yIGNhbGVuZGFyIGRvY3VtZW50aW5nIHRoZSBzcGVjaWZpYyBkYXlzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMgYW5kIG5vdCByZW50ZWQgb3V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IFRheCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCBzdGF0ZW1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBSZWNvcmRzIG9mIGFueSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMgb3IgZGVwcmVjaWF0aW9uIHNjaGVkdWxlcyBpZiBwcmV2aW91c2x5IGNsYWltZWQgb24geW91ciB0YXggcmV0dXJucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGRvY3VtZW50cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBvciBjb250YWN0IHVzIGRpcmVjdGx5IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3lhbHR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUm95YWx0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIGluZGljYXRlZCByZWNlaXZpbmcgcGF5bWVudHMgdGhhdCBjb3VsZCBiZSBjb25zaWRlcmVkIHJveWFsdHkgaW5jb21lIHRoaXMgcGFzdCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbGwgRm9ybXMgMTA5OS1NSVNDOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgYW55IDEwOTktTUlTQyBmb3JtcyByZWNlaXZlZCBmb3Igcm95YWx0eSBwYXltZW50cy4gSW5jbHVkZSB0aG9zZSBmcm9tIHRyYWRpdGlvbmFsIHNvdXJjZXMgbGlrZSBwYXRlbnRzLCBjb3B5cmlnaHRzLCBhbmQgbWluZXJhbCByaWdodHMsIGFzIHdlbGwgYXMgYW55IGZyb20gZGlnaXRhbCBjb250ZW50IHBsYXRmb3JtcyBzdWNoIGFzIFVkZW15LCBZb3VUdWJlLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBTdGF0ZW1lbnQgb2YgRWFybmluZ3M6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlIHJveWFsdHkgaW5jb21lIGZyb20gc291cmNlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgMTA5OS1NSVNDLCBvciBpbiBhZGRpdGlvbiB0byB0aG9zZSB0aGF0IGRvLCB3ZSBuZWVkIGEgZGV0YWlsZWQgc3RhdGVtZW50IG9yIGxvZyBvZiB0aGVzZSBlYXJuaW5ncy4gVGhpcyBzaG91bGQgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdlbmVyYXRpb24gb2YgdGhpcyByb3lhbHR5IGluY29tZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYXJrZXRpbmcsIHByb2R1Y3Rpb24sIGFuZCBsZWdhbCBleHBlbnNlcy4gUGxlYXNlIHByb3ZpZGUgcmVjZWlwdHMsIGludm9pY2VzLCBvciBhIGRldGFpbGVkIGV4cGVuc2UgbG9nLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGlnaXRhbCBDb250ZW50IFBsYXRmb3JtIFJlcG9ydHM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgYW55IHllYXItZW5kIHN1bW1hcnkgcmVwb3J0cyBvciBpbmNvbWUgc3RhdGVtZW50cyBwcm92aWRlZCBieSBkaWdpdGFsIHBsYXRmb3JtcyB3aGVyZSB5b3VyIGNvbnRlbnQgaXMgaG9zdGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFdpdGhob2xkaW5nIE5vdGljZXM6PC9zdHJvbmc+IElmIHRheCB3YXMgd2l0aGhlbGQgZnJvbSBhbnkgb2YgeW91ciByb3lhbHR5IHBheW1lbnRzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIG5vdGljZXMgaW5kaWNhdGluZyB0aGUgYW1vdW50IHdpdGhoZWxkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGVzZSBkb2N1bWVudHMgYW5kIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoYXQgeW91ciB0YXggcHJlcGFyYXRpb24gaXMgYm90aCBhY2N1cmF0ZSBhbmQgbWF4aW1pemVkIGZvciB5b3VyIGJlbmVmaXQuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBpdGVtcywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIG93bmluZyByZW50YWwgcHJvcGVydGllcyB0aGF0IG9wZXJhdGUgYXMgYSBIb3RlbCwgTW90ZWwsIEJlZCBhbmQgQnJlYWtmYXN0LCBvciBvZmZlciBzaG9ydC10ZXJtIGFjY29tbW9kYXRpb25zIHNpbWlsYXIgdG8gQWlyYm5iLiBUbyBlbnN1cmUgd2UgY2FuIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3Qgc2VydmljZSBhbmQgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb3BlcnR5IHlvdSByZW50IG91dCBvbiBhIHNob3J0LXRlcm0gYmFzaXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgUmVjb3Jkczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20gdGhlc2UgcHJvcGVydGllcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byByZW50YWwgaW5jb21lLCBjbGVhbmluZyBmZWVzLCBhbmQgYW55IG90aGVyIGNoYXJnZXMgdG8gcmVudGVycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjb3Jkczo8L3N0cm9uZz4gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggcmVudGFsIGFjdGl2aXR5LiBUaGlzIGluY2x1ZGVzIG1vcnRnYWdlIGludGVyZXN0LCBwcm9wZXJ0eSB0YXhlcywgaW5zdXJhbmNlLCByZXBhaXJzIGFuZCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBtYW5hZ2VtZW50IGZlZXMsIGFuZCBhZHZlcnRpc2luZyBjb3N0cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk9jY3VwYW5jeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTnVtYmVyIG9mIGRheXMgZWFjaCBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBkdXJpbmcgdGhlIHllYXIsIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBkYXlzIGl0IHdhcyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3NlcywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxlZ2FsIERvY3VtZW50YXRpb246PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbG9jYWwgbGljZW5zZXMsIHBlcm1pdHMsIG9yIHJlZ2lzdHJhdGlvbnMgcmVxdWlyZWQgZm9yIG9wZXJhdGluZyB0aGVzZSByZW50YWwgcHJvcGVydGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgY2hvb3Npbmcgb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZWNlbnQgY29uZmlybWF0aW9uIHJlZ2FyZGluZyByZWNlaXZpbmcgcGF5bWVudHMgb3IgcmVmdW5kcyBjb25zaWRlcmVkIGEgJ1RheGFibGUgUmVjb3ZlcnknIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGluY29ycG9yYXRlIHRoaXMgaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzLiBDb3VsZCB5b3UgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbjxvbD5cclxuICA8bGk+PGI+QW1vdW50IG9mIFRheGFibGUgUmVjb3Zlcnk6PC9iPiBUaGUgdG90YWwgc3VtIG9mIGFsbCBwYXltZW50cyBvciByZWZ1bmRzIHJlY2VpdmVkIHRoYXQgYXJlIGNsYXNzaWZpZWQgYXMgdGF4YWJsZSByZWNvdmVyeS48L2xpPlxyXG4gIDxsaT48Yj5Tb3VyY2UgRG9jdW1lbnRhdGlvbjo8L2I+IFBsZWFzZSBwcm92aWRlIGFueSBvZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50cyBjb25maXJtaW5nIHRoZXNlIHBheW1lbnRzIG9yIHJlZnVuZHMuIFRoaXMgY291bGQgaW5jbHVkZSBiYW5rIHN0YXRlbWVudHMsIHJlZnVuZCBvciBjb21wZW5zYXRpb24gbGV0dGVycywgb3IgYW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24uPC9saT5cclxuICA8bGk+PGI+TmF0dXJlIG9mIHRoZSBPcmlnaW5hbCBEZWR1Y3Rpb24gb3IgQ3JlZGl0OjwvYj4gQSBicmllZiBleHBsYW5hdGlvbiBvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBleHBlbnNlIG9yIGludmVzdG1lbnQgdGhhdCBsZWQgdG8gdGhlIHRheGFibGUgcmVjb3ZlcnkuIFRoaXMgaW5jbHVkZXMgdGhlIHRheCB5ZWFyIG9mIHRoZSBkZWR1Y3Rpb24gb3IgY3JlZGl0LjwvbGk+XHJcbiAgPGxpPjxiPkRhdGUgUmVjZWl2ZWQ6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZXMgd2hlbiB0aGVzZSBwYXltZW50cyBvciByZWZ1bmRzIHdlcmUgcmVjZWl2ZWQuPC9saT5cclxuICA8bGk+PGI+QW55IFJlbGF0ZWQgRXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvYj4gSWYgdGhlcmUgd2VyZSBhbnkgZXhwZW5zZXMgaW5jdXJyZWQgdG8gcmVjZWl2ZSB0aGlzIHJlY292ZXJ5IChzdWNoIGFzIGxlZ2FsIGZlZXMpLCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIHVzIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIGNvbXBsaWVzIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRheGFibGUgcmVjb3ZlcmllcywgcGxlYXNlIHByb3ZpZGUgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGZvciBlYWNoIHNlcGFyYXRlIGluc3RhbmNlLjwvcD5cclxuPHA+UGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBuZWVkIGFueSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLiBXZSBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIEFsaW1vbnlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQWxpbW9ueVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uIGZvciB5b3VyIHRheCBwcmVwYXJhdGlvbi4gV2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIGFsaW1vbnkgcGF5bWVudHMgaW4gdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNsdWRlIHRoaXMgaW4geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGFuZCBkb2N1bWVudHMgYmFzZWQgb24gdGhlIGRhdGUgb2YgeW91ciBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LjwvcD5cclxuICAgIDxwPkFsaW1vbnkgcGF5bWVudHMgYXJlIGNvbnNpZGVyZWQgdGF4YWJsZSBpbmNvbWUgZm9yIHRoZSByZWNlaXZlciBkZXBlbmRpbmcgb24gdGhlIGRhdGUgb2YgdGhlIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQuIERpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnRzIGV4ZWN1dGVkIGFmdGVyIERlY2VtYmVyIDMxLCAyMDE4LCBkbyBub3QgY291bnQgYWxpbW9ueSBwYXltZW50cyBhcyB0YXhhYmxlIGluY29tZS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgdG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcGF5bWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgeW91ciBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50Ojwvc3Ryb25nPiBUaGlzIGRldGVybWluZXMgd2hldGhlciB0aGUgYWxpbW9ueSBwYXltZW50cyB5b3UgcmVjZWl2ZWQgYXJlIHRheGFibGUuIFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiB0aGUgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkIHRoaXMgdGF4IHllYXI6PC9zdHJvbmc+IFRvdGFsIGFubnVhbCBhbW91bnQgcmVjZWl2ZWQgaW4gYWxpbW9ueSBwYXltZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gY29uZmlybWluZyBhbGltb255IHBheW1lbnRzOjwvc3Ryb25nPiBCYW5rIHN0YXRlbWVudHMsIHRyYW5zZmVyIHJlY2VpcHRzLCBvciBhbnkgbGVnYWwgZG9jdW1lbnRzIHNob3dpbmcgdGhlIGFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5ZXLigJlzIGluZm9ybWF0aW9uOjwvc3Ryb25nPiBGdWxsIG5hbWUgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb2YgdGhlIHBlcnNvbiBmcm9tIHdob20geW91IGhhdmUgcmVjZWl2ZWQgdGhlIGFsaW1vbnkgcGF5bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgaXMgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucyBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZXBvcnRlZCByZWNlaXZpbmcgZ292ZXJubWVudCBiZW5lZml0cyB0aGF0IG1heSBiZSB0YXhhYmxlIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgZmlsaW5nLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gMTA5OS1HIGZvciBlYWNoIGluc3RhbmNlIG9mIGdvdmVybm1lbnQgYmVuZWZpdHMgcmVjZWl2ZWQuIFRoaXMgZm9ybSBpcyB0eXBpY2FsbHkgaXNzdWVkIGZvciB1bmVtcGxveW1lbnQgY29tcGVuc2F0aW9uLCBzdGF0ZSBvciBsb2NhbCBpbmNvbWUgdGF4IHJlZnVuZHMsIGNyZWRpdHMgb3Igb2Zmc2V0cywgYW5kIG90aGVyIGdvdmVybm1lbnQgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgbGlzdCBvZiBiZW5lZml0cyByZWNlaXZlZDo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmVkIGdvdmVybm1lbnQgYmVuZWZpdHMgbm90IHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HIChzdWNoIGFzIGNlcnRhaW4gd2VsZmFyZSBiZW5lZml0cyksIHBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgbGlzdCBpbmNsdWRpbmcgdGhlIHR5cGUgb2YgYmVuZWZpdCwgYW1vdW50IHJlY2VpdmVkLCBhbmQgdGhlIGFnZW5jeSB0aGF0IHByb3ZpZGVkIHRoZSBiZW5lZml0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBCZW5lZml0czo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmVkIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cywgaW5jbHVkZSB5b3VyIFNTQS0xMDk5IG9yIFJSQi0xMDk5IGZvcm0gd2hpY2ggcmVwb3J0cyB0aGVzZSBlYXJuaW5ncy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBhbnkgd2l0aGhlbGQgdGF4ZXM6PC9zdHJvbmc+IElmIHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSBhbnkgYmVuZWZpdHMgcmVjZWl2ZWQsIGluY2x1ZGUgdGhlIGFwcGxpY2FibGUgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugc2VuZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBwcm9jZXNzZWQgdGltZWx5IGFuZCBjb3JyZWN0bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLiBBcyB5b3UndmUgaW5kaWNhdGVkIHJlY2VpcHQgb2YgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMvaW5mb3JtYXRpb24gdG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSB0YXggZmlsaW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBCZW5lZml0IFN0YXRlbWVudCAoRm9ybSBTU0EtMTA5OSk8L3N0cm9uZz4gLSBUaGlzIGZvcm0gZGV0YWlscyB0aGUgdG90YWwgYW1vdW50IG9mIHNvY2lhbCBzZWN1cml0eSBiZW5lZml0cyByZWNlaXZlZC4gSWYgeW91IGhhdmUgbWlzcGxhY2VkIHRoaXMgZm9ybSwgaXQgY2FuIGJlIG9idGFpbmVkIG9ubGluZSB0aHJvdWdoIHlvdXIgU29jaWFsIFNlY3VyaXR5IGFjY291bnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPk5vdGljZSBvZiBBZGp1c3RlZCBBbW91bnQ8L3N0cm9uZz4gKGlmIGFwcGxpY2FibGUpIC0gSWYgdGhlcmUgaGF2ZSBiZWVuIGFueSBhZGp1c3RtZW50cyBvciBjb3JyZWN0aW9ucyB0byB5b3VyIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cyBkdXJpbmcgdGhlIHllYXIsIHBsZWFzZSBwcm92aWRlIGFueSBub3RpY2VzIG9yIGRvY3VtZW50YXRpb24gcmVmbGVjdGluZyB0aGVzZSBjaGFuZ2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5TdXBwbGVtZW50YWwgU2VjdXJpdHkgSW5jb21lIChTU0kpPC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIEFsdGhvdWdoIFNTSSBpcyB0eXBpY2FsbHkgbm90IHRheGFibGUsIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgcGF5bWVudHMgaXMgc3RpbGwgcmVxdWlyZWQgZm9yIGNvbXByZWhlbnNpdmUgZmluYW5jaWFsIGFzc2Vzc21lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgZGV0ZXJtaW5pbmcgdGhlIHRheGFibGUgcG9ydGlvbiBvZiB5b3VyIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cywgaWYgYW55LCBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy4gRmFpbHVyZSB0byBwcm92aWRlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBtYXkgcmVzdWx0IGluIGRlbGF5cyBvciBpbmFjY3VyYWNpZXMgaW4geW91ciB0YXggZmlsaW5nLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoZXNlIG1hdHRlcnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdhbWJsaW5nIFdpbm5pbmdzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHYW1ibGluZyBXaW5uaW5nc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciBwcmV2aW91cyBhbnN3ZXJzIHRoYXQgeW91IGhhdmUgZXhwZXJpZW5jZWQgZ2FtYmxpbmcgd2lubmluZ3MgdGhpcyB0YXggeWVhciBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgb3Igb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCBpdCdzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHdpbm5pbmdzLjwvcD5cclxuPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gZm9yIEVhY2ggV2lubmluZzo8L3N0cm9uZz4gVGhpcyBjYW4gaW5jbHVkZSBXLTJHIGZvcm1zLCBzdGF0ZW1lbnRzIGZyb20gY2FzaW5vcywgcmFjZXRyYWNrcywgb3Igb3RoZXIgZ2FtYmxpbmcgZXN0YWJsaXNobWVudHMsIGFuZCBhbnkgb3RoZXIgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB0aGF0IHJlcG9ydHMgeW91ciB3aW5uaW5ncy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRhdGVzIG9mIFdpbm5pbmdzOjwvc3Ryb25nPiBUaGUgc3BlY2lmaWMgZGF0ZXMgb24gd2hpY2ggeW91IGhhZCBnYW1ibGluZyB3aW5uaW5ncy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlR5cGVzIG9mIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IFBsZWFzZSBzcGVjaWZ5IHdoZXRoZXIgeW91ciB3aW5uaW5ncyB3ZXJlIGZyb20gbG90dGVyaWVzLCBjYXNpbm9zLCBiZXR0aW5nLCBzcG9ydHMgYmV0dGluZywgZ2FtZXMgb2YgY2hhbmNlLCBvciBhbnkgb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuPC9saT5cclxuICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgV2lubmluZ3M6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgd29uIGZyb20gZWFjaCBnYW1ibGluZyBhY3Rpdml0eS4gUGxlYXNlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBjYXNoIHdpbm5pbmdzIGFuZCB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYW55IG5vbi1jYXNoIHByaXplcy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkV4cGVuc2VzIFJlbGF0ZWQgdG8gR2FtYmxpbmcgQWN0aXZpdGllczo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgbGlzdCBhbnkgZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIGdhbWJsaW5nIGFjdGl2aXRpZXMsIHN1Y2ggYXMgYnV5LWlucyBvciB0cmF2ZWwgZXhwZW5zZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlIGRlZHVjdGliaWxpdHkgb2YgdGhlc2UgZXhwZW5zZXMgbWF5IHZhcnkuPC9saT5cclxuICA8bGk+PHN0cm9uZz5Mb3NzZXM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIHJlY29yZHMgb2YgeW91ciBsb3NzZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgbG9zc2VzIGFzIHRoZXkgY2FuIHBvdGVudGlhbGx5IG9mZnNldCB5b3VyIHdpbm5pbmdzIGZvciB0YXggcHVycG9zZXMuIE5vdGUsIGxvc3NlcyBjYW4gb25seSBiZSBjbGFpbWVkIHVwIHRvIHRoZSBhbW91bnQgb2YgdG90YWwgd2lubmluZ3MuPC9saT5cclxuPC9vbD5cclxuPHA+SXQncyBpbXBvcnRhbnQgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSByZXBvcnQgeW91ciBnYW1ibGluZyB3aW5uaW5ncyBhbmQgYW55IHJlbGF0ZWQgZGVkdWN0aW9ucyBvciBsb3NzZXMgb24geW91ciB0YXggcmV0dXJuLiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGFzIGRldGFpbGVkIGFuZCBhY2N1cmF0ZSBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbjxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBvciBpZiB5b3UgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UncmUgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2FuY2VsbGF0aW9uIG9mIERlYnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+T3VyIHJlY29yZHMgaW5kaWNhdGUgeW91J3ZlIGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIGhhdmluZyBkZWJ0cyBmb3JnaXZlbiwgY2FuY2VsZWQsIG9yIGRpc2NoYXJnZWQgZm9yIGxlc3MgdGhhbiB0aGUgYW1vdW50IHlvdSBvd2VkIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluZm9ybWF0aW9uIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZXhwbG9yZSBhbnkgYXBwbGljYWJsZSB0YXggcmVsaWVmIG9yIGV4Y2x1c2lvbnMsIHdlIG5lZWQgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbjxsaT48c3Ryb25nPkZvcm0gMTA5OS1DPC9zdHJvbmc+OiBDb3BpZXMgb2YgYW55IEZvcm0gMTA5OS1DIHlvdSByZWNlaXZlZCByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC48L2xpPlxyXG48bGk+PHN0cm9uZz5EZXRhaWxlZCBMaXN0IG9mIERlYnRzPC9zdHJvbmc+OiBJZiB5b3UgZGlkbid0IHJlY2VpdmUgYSBGb3JtIDEwOTktQywgcGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFueSBkZWJ0cyB0aGF0IHdlcmUgY2FuY2VsZWQsIGluY2x1ZGluZzpcclxuICAgIDx1bD5cclxuICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgY3JlZGl0b3I8L2xpPlxyXG4gICAgPGxpPlRoZSBvcmlnaW5hbCBhbW91bnQgb2YgdGhlIGRlYnQ8L2xpPlxyXG4gICAgPGxpPlRoZSBhbW91bnQgY2FuY2VsZWQ8L2xpPlxyXG4gICAgPGxpPlRoZSBkYXRlIG9mIGNhbmNlbGxhdGlvbjwvbGk+XHJcbiAgICA8L3VsPlxyXG48L2xpPlxyXG48bGk+PHN0cm9uZz5FeHBsYW5hdGlvbiBvZiBDaXJjdW1zdGFuY2VzPC9zdHJvbmc+OiBBIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHRoZSBjaXJjdW1zdGFuY2VzIGxlYWRpbmcgdG8gdGhlIGRlYnQgY2FuY2VsbGF0aW9uIChlLmcuLCBmaW5hbmNpYWwgaGFyZHNoaXAsIHJldHVybiBvZiBwdXJjaGFzZWQgZ29vZHMsIGV0Yy4pLjwvbGk+XHJcbjxsaT48c3Ryb25nPkluc29sdmVuY3kgRG9jdW1lbnRhdGlvbjwvc3Ryb25nPjogSWYgeW91IHdlcmUgaW5zb2x2ZW50ICh3aGVyZSB5b3VyIHRvdGFsIGRlYnRzIGV4Y2VlZGVkIHlvdXIgdG90YWwgYXNzZXRzKSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGNhbmNlbGxhdGlvbiwgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgZmluYW5jaWFsIHN0YXR1cyBhdCB0aGF0IHRpbWUuPC9saT5cclxuPC9vbD5cclxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgd2UgYWNjdXJhdGVseSByZXBvcnQgeW91ciBmaW5hbmNpYWwgaW5mb3JtYXRpb24gYW5kIHRha2UgYWR2YW50YWdlIG9mIGFueSBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gdGhlIGNhbmNlbGxhdGlvbiBvZiBkZWJ0LiBQbGVhc2UgdXBsb2FkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cclxuPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByaW1hcnkgUmVzaWRlbmNlIERlYnQgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBhIHBvcnRpb24gb2YgeW91ciBtb3J0Z2FnZSBmb3IgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSB3YXMgZm9yZ2l2ZW4sIGNhbmNlbGVkLCBvciBkaXNjaGFyZ2VkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGlzIGluIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+Rm9ybSAxMDk5LUMsIENhbmNlbGxhdGlvbiBvZiBEZWJ0OjwvYj4gVGhpcyBpcyBhIGNydWNpYWwgZG9jdW1lbnQgdGhhdCBsZW5kZXJzIG11c3Qgc2VuZCB5b3UgaWYgdGhleSBjYW5jZWxlZCBvciBmb3JnYXZlIGEgZGVidCBleGNlZWRpbmcgJDYwMC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Xcml0dGVuIGNvbW11bmljYXRpb24gZnJvbSB5b3VyIGxlbmRlcjo8L2I+IEFueSBsZXR0ZXJzIG9yIG9mZmljaWFsIGRvY3VtZW50cyBmcm9tIHlvdXIgbGVuZGVyIHJlZ2FyZGluZyB0aGUgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlIG9mIHlvdXIgbW9ydGdhZ2UgZGVidC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Nb3J0Z2FnZSBzdGF0ZW1lbnRzOjwvYj4gUGxlYXNlIHByb3ZpZGUgbW9ydGdhZ2Ugc3RhdGVtZW50cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiB0byBzaG93IHRoZSBjaGFuZ2UgaW4geW91ciBtb3J0Z2FnZSBiYWxhbmNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgcHJvcGVydHk6PC9iPiBUaGlzIGluY2x1ZGVzOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+WW91ciBtb3J0Z2FnZSBjb250cmFjdC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgcmVsYXRlZCB0byBmb3JlY2xvc3VyZSwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgYSBzaG9ydCBzYWxlLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVjb3JkIG9mIHBheW1lbnRzIG1hZGU6PC9iPiBJZiB5b3UgbWFkZSBhbnkgcGF5bWVudHMgdG93YXJkcyB0aGUgbW9ydGdhZ2UgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgc3RhdGVtZW50cyBpbmRpY2F0aW5nIHRoZXNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcHJvdmlkZSB0aGVtIHRvIHVzLiBJZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBvYnRhaW5pbmcgYW55IG9mIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gaW4gYSB0aW1lbHkgbWFubmVyIGlzIGNydWNpYWwgZm9yIHRoZSBhY2N1cmF0ZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0dWRlbnQgTG9hbiBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU3R1ZGVudCBMb2FuIERlYnQgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkluIHJlc3BvbnNlIHRvIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiBzdHVkZW50IGxvYW4gZGVidCBkdXJpbmcgdGhpcyB0YXggeWVhciwgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJvY2VzcyB5b3VyIHRheCByZXR1cm4uIFRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBDYW5jZWxsYXRpb24gb3IgRm9yZ2l2ZW5lc3MgTm90aWNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIGxldHRlciBvciBub3RpY2UgZnJvbSB0aGUgbGVuZGVyIG9yIHByb2dyYW0gYWRtaW5pc3RyYXRvciBjb25maXJtaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2YgeW91ciBzdHVkZW50IGxvYW4gZGVidC48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlN0dWRlbnQgTG9hbiBBY2NvdW50IFN0YXRlbWVudDo8L3N0cm9uZz4gQSBzdGF0ZW1lbnQgZnJvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsb2FuIGZvcmdpdmVuZXNzLCBjYW5jZWxsYXRpb24sIG9yIGRpc2NoYXJnZSBvY2N1cnJlZCwgc2hvd2luZyB0aGUgb3V0c3RhbmRpbmcgYmFsYW5jZSBhbmQgdGhlIGJhbGFuY2UgYWZ0ZXIgdGhlIGFjdGlvbiB3YXMgdGFrZW4uPC9saT5cclxuICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFF1YWxpZnlpbmcgUHJvZ3JhbSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgY2VydGlmaWNhdGVzIG9mIHlvdXIgcGFydGljaXBhdGlvbiBpbiBxdWFsaWZ5aW5nIHByb2dyYW1zIHN1Y2ggYXMgUHVibGljIFNlcnZpY2UgTG9hbiBGb3JnaXZlbmVzcyAoUFNMRikgb3IgVGVhY2hlciBMb2FuIEZvcmdpdmVuZXNzLCBhbW9uZyBvdGhlcnMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5JUlMgRm9ybSAxMDk5LUMgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGlzc3VlZCBieSBzb21lIGxlbmRlcnMgd2hlbiBhIGRlYnQgaXMgZm9yZ2l2ZW4gb3IgY2FuY2VsZWQgYW5kIGlzIGNydWNpYWwgZm9yIHRheCByZXBvcnRpbmcgcHVycG9zZXMuIEl0IGluY2x1ZGVzIHRoZSBhbW91bnQgb2YgZm9yZ2l2ZW4gZGVidCB0aGF0IG1heSBiZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgRGVzY3JpcHRpb24gb2YgQ2lyY3Vtc3RhbmNlczo8L3N0cm9uZz4gQSB3cml0dGVuIGV4cGxhbmF0aW9uIG9mIHRoZSBjaXJjdW1zdGFuY2VzIGxlYWRpbmcgdG8gdGhlIGxvYW4ncyBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2UsIGluY2x1ZGluZyBhbnkgZG9jdW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIHlvdXIgZWxpZ2liaWxpdHkgdW5kZXIgdGhlIHNwZWNpZmljIHByb2dyYW0gb3IgY29uZGl0aW9uLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIHByb3ZpZGVkIGFyZSBjb21wbGV0ZSBhbmQgbGVnaWJsZS4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBzZWN1cmVseSB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsLjwvcD5cclxuPHA+WW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCB3aWxsIGVuYWJsZSB1cyB0byBhY2N1cmF0ZWx5IGFuZCBlZmZpY2llbnRseSBjb21wbGV0ZSB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG48cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSG9iYnkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJIb2JieSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGluY29tZSBzb3VyY2VzIGZvciB0aGlzIHRheCB5ZWFyLiBBcyBwYXJ0IG9mIG91ciBwcmVwYXJhdGlvbiBmb3IgeW91ciB0YXggcmV0dXJuLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSd2ZSBlYXJuZWQgbW9uZXkgZnJvbSBob2JiaWVzLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIHRvIHRoZSBJUlMgYW5kIGVuc3VyZSB5b3UgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBIb2JieSBJbmNvbWU6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20geW91ciBob2JieSBhY3Rpdml0aWVzLiBQbGVhc2UgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb2YgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBob2JieSBhY3Rpdml0aWVzLiBUaGlzIGNhbiBpbmNsdWRlIG1hdGVyaWFscywgZXF1aXBtZW50LCBhbmQgYW55IG90aGVyIGNvc3RzIGluY3VycmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYmFuayBzdGF0ZW1lbnRzIHRoYXQgc2hvdyB0aGUgdHJhbnNhY3Rpb25zIHJlbGF0ZWQgdG8geW91ciBob2JieSBpbmNvbWUgYW5kIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUHJpemVzOjwvc3Ryb25nPiBJZiB5b3VyIGhvYmJ5IGluY29tZSBpbmNsdWRlcyBwcml6ZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgcmVjZWlwdHMgdGhhdCBkZXRhaWwgdGhlc2UgYXdhcmRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+T3RoZXIgUmVsZXZhbnQgRG9jdW1lbnRzOjwvc3Ryb25nPiBBbnkgb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHRoZSBpbmNvbWUgYW5kIGV4cGVuc2VzIHJlcG9ydGVkIGZvciB5b3VyIGhvYmJ5IGFjdGl2aXRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGF2b2lkIGRlbGF5cyBpbiB0aGUgdGF4IHJldHVybiBwcm9jZXNzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2VydGFpbiBDb3VydCBBd2FyZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNlcnRhaW4gQ291cnQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBjb3VydCBhd2FyZHMgb3Igc2V0dGxlbWVudHMgaW4gdGhlIHBhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBhbW91bnRzIGFuZCBjb21wbHkgd2l0aCB0YXggb2JsaWdhdGlvbnMsIHdlIG5lZWQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSBhd2FyZHMgb3Igc2V0dGxlbWVudHMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UeXBlIG9mIEF3YXJkIG9yIFNldHRsZW1lbnQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIG5hdHVyZSAoZS5nLiwgbG9zdCB3YWdlcywgcHVuaXRpdmUgZGFtYWdlcywgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgYXdhcmRlZCBvciBzZXR0bGVkLCBiZWZvcmUgYW55IGRlZHVjdGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIFJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSB3aGVuIHlvdSByZWNlaXZlZCB0aGUgY29tcGVuc2F0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50cyBvciBqdWRnbWVudHMgcGVydGFpbmluZyB0byB0aGUgYXdhcmQgb3Igc2V0dGxlbWVudC4gVGhpcyBpbmNsdWRlcyBjb3VydCBvcmRlcnMsIGFncmVlbWVudCBsZXR0ZXJzLCBhbmQgcmVjZWlwdHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UYXggV2l0aGhlbGQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHRoZSBhbW91bnQgb2YgZmVkZXJhbCBvciBzdGF0ZSB0YXggYWxyZWFkeSB3aXRoaGVsZCBmcm9tIHRoZSBzZXR0bGVtZW50LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SXQncyBpbXBlcmF0aXZlIHdlIHJlY2VpdmUgdGhpcyBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIGNvdXJ0IGF3YXJkIG9yIHNldHRsZW1lbnQuIEZhaWx1cmUgdG8gcmVwb3J0IHN1Y2ggaW5jb21lIGFjY3VyYXRlbHkgY291bGQgcmVzdWx0IGluIHBlbmFsdGllcyBvciBhdWRpdHMgZnJvbSB0aGUgSVJTLjwvcD4gXHJcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGhhdmUgYW1wbGUgdGltZSBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcml6ZXMgYW5kIEF3YXJkc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4sIHdlIGhhdmUgaWRlbnRpZmllZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHByaXplcyBvciBhd2FyZHMgaW4gdGhlIGZvcm0gb2YgY2FzaCwgZ29vZHMsIG9yIHNlcnZpY2VzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIHRvIHRoZSBJUlMsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMgZnJvbSB5b3UuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBFYWNoIFByaXplIG9yIEF3YXJkOjwvc3Ryb25nPiBCcmllZmx5IGRlc2NyaWJlIGVhY2ggcHJpemUgb3IgYXdhcmQgcmVjZWl2ZWQsIGluY2x1ZGluZyB0aGUgbmF0dXJlIChjYXNoLCBnb29kcywgc2VydmljZXMpIGFuZCBjb250ZXh0IChjb250ZXN0LCBhY2hpZXZlbWVudCBhd2FyZCwgZXRjLikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBFYWNoIFByaXplIG9yIEF3YXJkOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBlYWNoIHByaXplIG9yIGF3YXJkIGF0IHRoZSB0aW1lIG9mIHJlY2VpcHQuIElmIHRoZSBwcml6ZSB3YXMgaW4gY2FzaCwgc3BlY2lmeSB0aGUgYW1vdW50LiBJZiBpbiBnb29kcyBvciBzZXJ2aWNlcywgcHJvdmlkZSBhbiBlc3RpbWF0ZWQgdmFsdWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgb24gd2hpY2ggZWFjaCBwcml6ZSBvciBhd2FyZCB3YXMgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Jc3N1ZXIgSW5mb3JtYXRpb246PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gKGlmIGF2YWlsYWJsZSkgb2YgdGhlIG9yZ2FuaXphdGlvbiBvciBlbnRpdHkgdGhhdCBhd2FyZGVkIHRoZSBwcml6ZSBvciBwcm92aWRlZCB0aGUgYXdhcmQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgV2l0aGhlbGQgVGF4ZXM6PC9zdHJvbmc+IEluZGljYXRlIGlmIGFueSB0YXhlcyB3ZXJlIHdpdGhoZWxkIGZyb20gdGhlIGF3YXJkZWQgYW1vdW50IGFuZCBwcm92aWRlIHRoZSB3aXRoaG9sZGluZyBkb2N1bWVudChzKSwgaWYgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SXQncyBjcnVjaWFsIGZvciB0YXggcHVycG9zZXMgdGhhdCB3ZSByZXBvcnQgdGhlc2UgYWNjdXJhdGVseSB0byBhdm9pZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBJUlMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIGEgd2l0aGRyYXdhbCBmcm9tIGEgQ292ZXJkZWxsIEVkdWNhdGlvbiBTYXZpbmdzIEFjY291bnQgKEVTQSkgb3IgYW4gRWR1Y2F0aW9uIElSQSBmb3IgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGRpc3RyaWJ1dGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHdpdGhkcmF3biBmcm9tIHRoZSBDb3ZlcmRlbGwgRVNBIG9yIEVkdWNhdGlvbiBJUkEuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgYnJlYWtkb3duIG9mIGhvdyB0aGVzZSBmdW5kcyB3ZXJlIHV0aWxpemVkLCBzcGVjaWZpY2FsbHk6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgdXNlZCBmb3IgdHVpdGlvbiBhbmQgZmVlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCBzcGVudCBvbiBib29rcywgc3VwcGxpZXMsIGFuZCBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBhbW91bnRzIHNwZW50IG9uIHJvb20gYW5kIGJvYXJkLCBzcGVjaWZ5aW5nIGlmIHRoZSBiZW5lZmljaWFyeSB3YXMgZW5yb2xsZWQgYXQgbGVhc3QgaGFsZi10aW1lLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcXVhbGlmaWVkIGVkdWNhdGlvbiBleHBlbnNlcyBwYWlkIHVzaW5nIHRoZXNlIGZ1bmRzLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgdGhlIGJlbmVmaWNpYXJ5J3MgZW5yb2xsbWVudCBzdGF0dXMgKGUuZy4sIHR1aXRpb24gc3RhdGVtZW50LCBlbnJvbGxtZW50IHZlcmlmaWNhdGlvbikuPC9saT5cclxuICAgICAgICA8bGk+VGhlIG5hbWUgYW5kIGFkZHJlc3Mgb2YgdGhlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uKHMpIGludm9sdmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBGb3JtIDEwOTktUSByZWNlaXZlZCBwZXJ0YWluaW5nIHRvIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhpcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHdlIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gZWR1Y2F0aW9uIGV4cGVuc2VzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCBsZXQgdXMga25vdyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIG9yIGhhdmUgYW55IHF1ZXN0aW9ucy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBRVFAgRGlzdHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBRVFAgRGlzdHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGlzdHJpYnV0aW9ucyBmcm9tIGEgUXVhbGlmaWVkIFR1aXRpb24gUHJvZ3JhbSAoUVRQKSwgY29tbW9ubHkga25vd24gYXMgYSA1MjkgcGxhbiwgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiByZWxhdGVkIHRvIHRoZXNlIGRpc3RyaWJ1dGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5BY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBvZiB0aGUgYWNjb3VudCBob2xkZXIgYW5kIHRoZSBiZW5lZmljaWFyeSBmb3IgZWFjaCA1MjkgcGxhbiBkaXN0cmlidXRpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkRpc3RyaWJ1dGlvbiBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIDEwOTktUSBmb3JtcyByZWNlaXZlZCBmb3IgZWFjaCBkaXN0cmlidXRpb24gdGhpcyB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIERpc3RyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgb2YgbW9uZXkgZGlzdHJpYnV0ZWQgZnJvbSB0aGUgUVRQIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkVkdWNhdGlvbmFsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGZvciB3aGljaCB0aGUgUVRQIGRpc3RyaWJ1dGlvbnMgd2VyZSB1c2VkLiBUaGlzIGluY2x1ZGVzIHR1aXRpb24sIGJvb2tzLCBzdXBwbGllcywgYW5kIGFueSBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNlaXB0czo8L3N0cm9uZz4gUmVjZWlwdHMgb3Igc3RhdGVtZW50cyB0aGF0IHByb3ZpZGUgcHJvb2Ygb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5JbnN0aXR1dGlvbiBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTmFtZSBhbmQgYWRkcmVzcyBvZiB0aGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24ocykgd2hlcmUgdGhlIGV4cGVuc2VzIHdlcmUgaW5jdXJyZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlJlY2lwaWVudCdzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCAodGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSA1MjkgcGxhbikgYW5kIHRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cclxuPC9vbD5cclxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGRldGVybWluaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHRoZSBkaXN0cmlidXRpb25zIGFuZCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cclxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHJpa2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlN0cmlrZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFzIHdlIHdvcmsgdG9nZXRoZXIgdG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSByZWNlaXZlZCBzdHJpa2UgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhciBkdWUgdG8gcGFydGljaXBhdGlvbiBpbiBhIGxhYm9yIHN0cmlrZS4gVG8gZW5zdXJlIGNvbXBsaWFuY2UgYW5kIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgU3RyaWtlIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgc3VtIG9mIHN0cmlrZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U291cmNlIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGVzZSBiZW5lZml0cyB3ZXJlIHBhaWQgYnkgeW91ciB1bmlvbiwgYW4gaW5zdXJhbmNlIHBvbGljeSwgb3IgYW5vdGhlciBzb3VyY2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZm9ybXMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBzaG93IHRoZSByZWNlaXB0IG9mIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgU3RyaWtlIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IExpc3QgdGhlIGRhdGVzIG9yIGR1cmF0aW9uIG9mIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgbGFib3Igc3RyaWtlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBDb3N0cyBvciBFeHBlbnNlczo8L3N0cm9uZz4gSWYgeW91IGluY3VycmVkIGFueSBjb3N0cyBvciBleHBlbnNlcyByZWxhdGVkIHRvIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN0cmlrZSAoZS5nLiwgdHJhdmVsIHRvIHBpY2tldCBsaW5lcywgc2lnbmFnZSBtYXRlcmlhbHMpLCBwbGVhc2UgZGV0YWlsIHRoZXNlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBtYXkgaW1wYWN0IHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkp1cnkgRHV0eSBQYXlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkp1cnkgRHV0eSBQYXlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSByZWFjaGluZyB0aGUgY3JpdGljYWwgc3RhZ2VzIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGp1cnkgZHV0eSBwYXkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmNvbWUgYW5kIGV4cGxvcmUgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIEp1cnkgRHV0eSBQYXk6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciBzZXJ2aW5nIGp1cnkgZHV0eS4gVGhpcyBhbW91bnQgaXMgb2Z0ZW4gcmVwb3J0ZWQgb24gRm9ybSAxMDk5LUcuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5KdXJ5IER1dHkgRGF0ZXM6PC9zdHJvbmc+IFRoZSBkYXRlcyB5b3Ugc2VydmVkIG9uIGp1cnkgZHV0eS4gVGhpcyBoZWxwcyBpbiB2ZXJpZnlpbmcgdGhlIGR1cmF0aW9uIGFuZCBjb3JyZWxhdGluZyBpdCB3aXRoIHRoZSBjb21wZW5zYXRpb24gcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBJZiB5b3VyIGVtcGxveWVyIGNvbXBlbnNhdGVkIHlvdSAoaW4gZnVsbCBvciBwYXJ0KSBmb3IgdGhlIHRpbWUgeW91IHdlcmUgc2VydmluZyBvbiBqdXJ5IGR1dHksIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3VyIGVtcGxveWVyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBTdGF0ZW1lbnRzIG9yIFBheSBTdHViczo8L3N0cm9uZz4gQW55IGJhbmsgc3RhdGVtZW50cyBvciBwYXkgc3R1YnMgc2hvd2luZyB0aGUganVyeSBkdXR5IHBheSBkZXBvc2l0IG9yIGVtcGxveWVyIHJlaW1idXJzZW1lbnRzLiBUaGVzZSBkb2N1bWVudHMgaGVscCBpbiB2ZXJpZnlpbmcgdGhlIGFtb3VudHMgZGVjbGFyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRyAoaWYgcmVjZWl2ZWQpOjwvc3Ryb25nPiBTb21lIGp1cmlzZGljdGlvbnMgcHJvdmlkZSBhIEZvcm0gMTA5OS1HIGZvciBqdXJ5IGR1dHkgcGF5LiBJZiB5b3UgcmVjZWl2ZWQgb25lLCBwbGVhc2UgaW5jbHVkZSBhIGNvcHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHdpbGwgYWxsb3cgdXMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWxhc2thIFBlcm1hbmVudCBGdW5kcyBEaXZpZGVuZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkluIHJldmlld2luZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgZm9yIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbiwgd2Ugbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluZm9ybWF0aW9uIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIGd1aWRlbGluZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPjEwOTktTUlTQyBGb3JtOjwvYj4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSAxMDk5LU1JU0MgZm9ybSBpc3N1ZWQgYnkgdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBDb3Jwb3JhdGlvbi4gVGhpcyBmb3JtIG91dGxpbmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGl2aWRlbmRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PGI+QmFuayBTdGF0ZW1lbnRzOjwvYj4gSWYgcG9zc2libGUsIHByb3ZpZGUgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIGRlcG9zaXQocykgb2YgdGhlIGRpdmlkZW5kcyBpbnRvIHlvdXIgYWNjb3VudC4gVGhpcyBzZXJ2ZXMgYXMgYWRkaXRpb25hbCBwcm9vZiBvZiBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PGI+UGVyc29uYWwgSWRlbnRpZmljYXRpb24gSW5mb3JtYXRpb246PC9iPiBDb25maXJtIHlvdXIgZnVsbCBsZWdhbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gZGlzY3JlcGFuY2llcyBiZXR3ZWVuIG91ciByZWNvcmRzIGFuZCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgb24gdGhlIDEwOTktTUlTQyBmb3JtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlByZXZpb3VzIFllYXIncyBEaXZpZGVuZCBJbmZvcm1hdGlvbjo8L2I+IElmIHlvdSByZWNlaXZlZCBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciBidXQgaGF2ZSBub3QgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIHNvLiBJdCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBjYXJyeW92ZXIgZWZmZWN0cyBvbiB5b3VyIGN1cnJlbnQgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLiBDb21wbGV0aW5nIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB3aWxsIGVuYWJsZSB1cyB0byBwcm9ncmVzcyB3aXRoIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4gZWZmaWNpZW50bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkV4ZWN1dG9yIEZlZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV4ZWN1dG9yIEZlZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCBmcm9tIHlvdXIgcmVjZW50IHJlc3BvbnNlIHRoYXQgeW91IGhhdmUgcGFpZCBvciByZWNlaXZlZCBleGVjdXRvciBmZWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRheCBwcmVwYXJhdGlvbiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZXNlIHRyYW5zYWN0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbjxvbD5cclxuICA8bGk+QSBkZXRhaWxlZCBzdGF0ZW1lbnQgb2YgdGhlIGV4ZWN1dG9yIGZlZXMgcGFpZCBvciByZWNlaXZlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzLjwvbGk+XHJcbiAgPGxpPklmIHlvdSByZWNlaXZlZCBleGVjdXRvciBmZWVzLCBwbGVhc2UgcHJvdmlkZSB5b3VyIHJvbGUgKGUuZy4sIHByaW1hcnkgZXhlY3V0b3IsIGNvLWV4ZWN1dG9yKSBhbmQgdGhlIGVzdGF0ZSdzIG5hbWUuPC9saT5cclxuICA8bGk+SWYgeW91IHBhaWQgZXhlY3V0b3IgZmVlcywgcHJvdmlkZSB0aGUgbmFtZSBhbmQgdGF4IGlkZW50aWZpY2F0aW9uIG51bWJlciAoU1NOIG9yIEVJTikgb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhlIGZlZXMgd2VyZSBwYWlkLjwvbGk+XHJcbiAgPGxpPkFueSBkb2N1bWVudGF0aW9uIHRoYXQgb3V0bGluZXMgdGhlIGFncmVlbWVudCBvciBjb3VydCBvcmRlciByZWdhcmRpbmcgdGhlIGV4ZWN1dG9yIGZlZS48L2xpPlxyXG4gIDxsaT5Db3BpZXMgb2YgYmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgZXZpZGVuY2luZyB0aGUgcGF5bWVudCBvciByZWNlaXB0IG9mIHRoZXNlIGZlZXMuPC9saT5cclxuICA8bGk+Rm9yIGZlZXMgcmVjZWl2ZWQsIHBsZWFzZSBjb25maXJtIHdoZXRoZXIgdGF4ZXMgd2VyZSB3aXRoaGVsZCBvciBub3QuIElmIHNvLCBwcm92aWRlIGEgY29weSBvZiB0aGUgRm9ybSAxMDk5LU1JU0MgeW91IHJlY2VpdmVkLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZXhlY3V0b3IgZmVlcyBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyBndWlkZWxpbmVzLiBQbGVhc2Ugc2VuZCB0aGUgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiB0byB1cyB0byBmYWNpbGl0YXRlIGEgdGltZWx5IGFuZCBhY2N1cmF0ZSB0YXggZmlsaW5nLjwvcD5cclxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFdmVudCBHcmF0dWl0aWVzIGFuZCBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRXZlbnQgR3JhdHVpdGllcyBhbmQgR2lmdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXJ0aWVzIG9yIGV2ZW50cyB5b3UgaG9zdGVkIHRoaXMgdGF4IHllYXIuIFNwZWNpZmljYWxseSwgc2luY2UgeW91IGluZGljYXRlZCB0aGF0IHlvdSByZWNlaXZlZCBnaWZ0cywgZ3JhdHVpdGllcywgb3Igb3RoZXIgZm9ybXMgb2YgY29tcGVuc2F0aW9uIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGV2ZW50cywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBlYWNoIGV2ZW50IGhvc3RlZCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGF0ZSBvZiB0aGUgZXZlbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Mb2NhdGlvbiBvZiB0aGUgZXZlbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BcHByb3hpbWF0ZSBudW1iZXIgb2YgYXR0ZW5kZWVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+UHVycG9zZSBvZiB0aGUgZXZlbnQgKGUuZy4sIHNhbGVzIHByb21vdGlvbiwgY3VzdG9tZXIgYXBwcmVjaWF0aW9uKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gZm9yIGVhY2ggZ2lmdCwgZ3JhdHVpdHksIG9yIGZvcm0gb2YgY29tcGVuc2F0aW9uIHJlY2VpdmVkLCBzdWNoIGFzOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Fc3RpbWF0ZWQgZmFpciBtYXJrZXQgdmFsdWUgYXQgdGhlIHRpbWUgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBwcm92aWRpbmcgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIHJlZ2FyZGluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBpdGVtcyAoZS5nLiwgdGhhbmsgeW91IGxldHRlcnMsIGVtYWlscyBjb25maXJtaW5nIHJlY2VpcHQpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSBob3N0aW5nIHRoZXNlIGV2ZW50cyAoZS5nLiwgY2F0ZXJpbmcsIHZlbnVlIHJlbnRhbCwgZW50ZXJ0YWlubWVudCkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCBpcyBjcnVjaWFsIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgYWxsIGZvcm1zIG9mIGluY29tZSwgaW5jbHVkaW5nIG5vbi1tb25ldGFyeSBjb21wZW5zYXRpb24sIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJRdWFsaWZpZWQgRWR1Y2F0b3IgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgYXBwcm9hY2ggdG8geW91ciB0YXggcHJlcGFyYXRpb24gZm9yIHRoZSBjdXJyZW50IHllYXIsIHlvdSBoYXZlIGluZGljYXRlZCB0aGF0IHlvdSd2ZSBpbmN1cnJlZCBvdXQtb2YtcG9ja2V0IGV4cGVuc2VzIGFzIGEgcXVhbGlmaWVkIGVkdWNhdG9yIGZvciBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzLiBUbyBhY2N1cmF0ZWx5IGNsYWltIHRoZXNlIGRlZHVjdGlvbnMgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0LCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48Yj5EZXRhaWxlZCBMaXN0IG9mIEV4cGVuc2VzOjwvYj4gQSBicmVha2Rvd24gb2YgYWxsIGNsYXNzcm9vbSBtYXRlcmlhbHMgb3Igc3VwcGxpZXMgcHVyY2hhc2VkLCBpbmNsdWRpbmcgYm9va3MsIHN1cHBsaWVzLCBjb21wdXRlciBlcXVpcG1lbnQgKGhhcmR3YXJlLCBzb2Z0d2FyZSwgYW5kIHNlcnZpY2VzKSwgYW5kIGFueSBvdGhlciByZWxldmFudCBtYXRlcmlhbHMuPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVjZWlwdHMgYW5kIFByb29mIG9mIFBheW1lbnQ6PC9iPiBDb3BpZXMgb2YgcmVjZWlwdHMgb3IgYmFuay9jcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIGZvciBlYWNoIHB1cmNoYXNlIG1hZGUuIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZGF0ZSBvZiBwdXJjaGFzZSBhbmQgdGhlIGl0ZW0gb3Igc2VydmljZSBwdXJjaGFzZWQgYXJlIGNsZWFybHkgdmlzaWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIFB1cmNoYXNlczo8L2I+IFRoZSBzcGVjaWZpYyBkYXRlcyBlYWNoIGl0ZW0gd2FzIHB1cmNoYXNlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlVzYWdlIERvY3VtZW50YXRpb246PC9iPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyBlYWNoIGl0ZW0gcHVyY2hhc2VkIHdhcyB1c2VkIGluIHRoZSBjbGFzc3Jvb20gc2V0dGluZy48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Ub3RhbCBBbW91bnQ6PC9iPiBUaGUgdG90YWwgZG9sbGFyIGFtb3VudCBzcGVudCBvbiB0aGVzZSBtYXRlcmlhbHMgYW5kIHN1cHBsaWVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5VbmRlcnN0YW5kaW5nIHRoYXQgeW91ciB0aW1lIGlzIHZhbHVhYmxlLCB3ZSBhcHByZWNpYXRlIHlvdXIgZWZmb3J0IGluIGNvbXBpbGluZyB0aGlzIGluZm9ybWF0aW9uIHByb21wdGx5LiBUaGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyaW5nIHlvdSBhcmUgY29tcGVuc2F0ZWQgZm9yIHlvdXIgaW52ZXN0bWVudCBpbiBlZHVjYXRpb25hbCBtYXRlcmlhbHMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IGRlbGF5LiBZb3UgY2FuIHNlbmQgdGhlIGRvY3VtZW50cyB0byB1cyBlaXRoZXIgdmlhIGVtYWlsIGF0IHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbSBvciB1cGxvYWQgdGhlbSBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGRlZGljYXRpb24gYXMgYW4gZWR1Y2F0b3IuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFybWVkIEZvcmNlcyBSZXNlcnZpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBSZXNlcnZpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaW5jdXJyZWQgdW5yZWltYnVyc2VkIHRyYXZlbCBleHBlbnNlcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGJlbmVmaWNpYWwgdGF4IGZpbGluZywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgZnJvbSB5b3U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBUcmF2ZWwgRGF0ZXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgbGlzdCBvZiBhbGwgZGF0ZXMgeW91IHRyYXZlbGVkIG1vcmUgdGhhbiAxMDAgbWlsZXMgYXdheSBmcm9tIGhvbWUgdG8gcGVyZm9ybSB5b3VyIHJlc2VydmUgZHV0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXMgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggb2YgdGhlIHRyYXZlbCBkYXRlcyBsaXN0ZWQsIHByb3ZpZGUgcmVjZWlwdHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gZm9yOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICA8bGk+VHJhbnNwb3J0YXRpb24gKGUuZy4sIGdhcyByZWNlaXB0cywgbWlsZWFnZSBsb2dzLCBhaXJwbGFuZSB0aWNrZXRzLCBldGMuKTwvbGk+XHJcbiAgICAgICAgPGxpPkxvZGdpbmcgKG9ubHkgaWYgYW4gb3Zlcm5pZ2h0IHN0YXkgd2FzIHJlcXVpcmVkKTwvbGk+XHJcbiAgICAgICAgPGxpPk1lYWxzIGFuZCBJbmNpZGVudGFsIEV4cGVuc2VzIChkZXRhaWxzIG9uIGVhY2gsIGlmIG5vdCBvcHRpbmcgZm9yIHRoZSBzdGFuZGFyZCBtZWFsIGFsbG93YW5jZSk8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzZXJ2ZSBTdGF0dXM6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIG9yZGVycyBvciBhbnkgZG9jdW1lbnRhdGlvbiBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBhbmQgZHV0aWVzIGFzIGFuIEFybWVkIEZvcmNlcyBSZXNlcnZpc3QgZHVyaW5nIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+U3RhdGVtZW50IG9mIFJlaW1idXJzZW1lbnQ6PC9zdHJvbmc+IEEgZGV0YWlsZWQgYWNjb3VudCBvZiBhbnkgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgZm9yIHRoZSB0cmF2ZWwgZXhwZW5zZXMgY2xhaW1lZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGFyZSBsZWdpYmxlIGFuZCBjbGVhcmx5IGxhYmVsZWQuIFByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUgdG8gYWxsb3cgc3VmZmljaWVudCB0aW1lIGZvciBwcm9jZXNzaW5nIGFuZCBpbmNsdXNpb24gaW4geW91ciB0YXggZmlsaW5nLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBPdXIgdGVhbSBpcyBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJmb3JtaW5nIEFydGlzdCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyZm9ybWluZyBBcnRpc3QgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlJ3JlIHJlYWNoaW5nIG91dCB0byBnYXRoZXIgbmVjZXNzYXJ5IGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB5b3VyIGV4cGVuc2VzIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QuIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXRhaWxzIHRoZSBzcGVjaWZpYyBqb2ItcmVsYXRlZCBleHBlbnNlcyB0aGF0IHdlIHJlcXVpcmUuIEtpbmRseSByZXZpZXcgYW5kIHByb3ZpZGUgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QXVkaXRpb24gRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGJhbmsvY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBzaG93aW5nIHBheW1lbnRzIGZvciBhdWRpdGlvbnMsIGluY2x1ZGluZyBhbnkgYXBwbGljYXRpb24gb3IgZW50cnkgZmVlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRyYXZlbCBFeHBlbnNlczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBmb3IgdHJhdmVsIGNvc3RzIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2VzLiBUaGlzIGluY2x1ZGVzIGFpcmZhcmUsIGxvZGdpbmcsIGNhciByZW50YWxzLCBhbmQgZ2Fzb2xpbmUgcmVjZWlwdHMuIFBsZWFzZSBpbmRpY2F0ZSB0aGUgZGF0ZXMgYW5kIHB1cnBvc2Ugb2YgZWFjaCB0cmlwLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHVtZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgZm9yIGFueSBjb3N0dW1lcyBvciBzcGVjaWFsaXplZCBjbG90aGluZyByZXF1aXJlZCBmb3IgeW91ciBwZXJmb3JtYW5jZXMgdGhhdCBhcmUgbm90IHN1aXRhYmxlIGZvciBldmVyeWRheSB3ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TWFrZXVwL0hhaXIgRXhwZW5zZXM6PC9zdHJvbmc+IFNwZWNpZmljIHRvIHBlcmZvcm1hbmNlcywgaW5jbHVkaW5nIGNvc3RzIGZvciBwcm9kdWN0cyBhbmQgcHJvZmVzc2lvbmFsIHNlcnZpY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhaW5pbmcgYW5kIFByb2Zlc3Npb25hbCBEZXZlbG9wbWVudDo8L3N0cm9uZz4gQ29zdHMgcmVsYXRlZCB0byBjbGFzc2VzLCB3b3Jrc2hvcHMsIG9yIHNlbWluYXJzIGFpbWVkIGF0IGltcHJvdmluZyB5b3VyIHBlcmZvcm1hbmNlIHNraWxscy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFnZW50IGFuZCBNYW5hZ2VtZW50IEZlZXM6PC9zdHJvbmc+IENvbnRyYWN0cyBvciBzdGF0ZW1lbnRzIGRldGFpbGluZyBwYXltZW50cyB0byBhZ2VudHMgb3IgbWFuYWdlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NaXNjZWxsYW5lb3VzIFBlcmZvcm1hbmNlLVJlbGF0ZWQgRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIGZvciBhbnkgb3RoZXIgZXhwZW5zZXMgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHdvcmsgYXMgYSBwZXJmb3JtaW5nIGFydGlzdCwgc3VjaCBhcyBlcXVpcG1lbnQsIG11c2ljIG9yIHNjcmlwdCBwdXJjaGFzZXMsIGFuZCBtYWludGVuYW5jZSBjb3N0cyBmb3IgaW5zdHJ1bWVudHMgb3IgcGVyZm9ybWFuY2UgZ2Vhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGNsZWFybHkgaW5kaWNhdGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UuIElmIHlvdSdyZSB1bnN1cmUgd2hldGhlciBhbiBleHBlbnNlIHF1YWxpZmllcywgaW5jbHVkZSBpdCB3aXRoIGEgYnJpZWYgbm90ZSBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRmVlIEJhc2VkIEdvdmVybm1lbnQgT2ZmaWNpYWwgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zIGFuZCBub3RlZCB0aGF0IHlvdSB3b3JrZWQgYXMgYSA8c3Ryb25nPmZlZS1iYXNlZCBnb3Zlcm5tZW50IG9mZmljaWFsPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIEFzIHBhcnQgb2YgdGhpcyByb2xlLCB5b3UndmUgcmVwb3J0ZWQgaW5jdXJyaW5nIHVucmVpbWJ1cnNlZCBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgb2ZmaWNpYWwgZHV0aWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltdW0gZGVkdWN0aW9ucyBvbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIEV4cGVuc2UgUmVwb3J0czo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIGV4cGVuc2VzLiBFYWNoIGVudHJ5IHNob3VsZCBpbmNsdWRlIHRoZSBkYXRlLCBhbW91bnQsIGFuZCBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBuYXR1cmUgb2YgdGhlIGV4cGVuc2UuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9mIHRoZSByZXBvcnRlZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBTY2hlZHVsZSBvciBEdXR5IFJvc3Rlcjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGNvcnJlbGF0ZXMgeW91ciByZXBvcnRlZCBleHBlbnNlcyB3aXRoIHlvdXIgb2ZmaWNpYWwgZHV0aWVzIG9uIHNwZWNpZmljIGRhdGVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk1pbGVhZ2UgTG9nOjwvc3Ryb25nPiBJZiBhbnkgZXhwZW5zZXMgYXJlIGZvciB0cmF2ZWwsIGEgZGV0YWlsZWQgbWlsZWFnZSBsb2cgc2hvd2luZyBkYXRlcywgZGVzdGluYXRpb24sIHB1cnBvc2Ugb2YgdGhlIHRyaXAsIGFuZCBtaWxlcyB0cmF2ZWxlZC4gRW5zdXJlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBwZXJzb25hbCBhbmQgb2ZmaWNpYWwgdHJhdmVsLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gd2l0aCBHb3Zlcm5tZW50IEFnZW5jeTo8L3N0cm9uZz4gQW55IGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGdvdmVybm1lbnQgYWdlbmN5IGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBleHBlbnNlcyB3ZXJlIG5vdCByZWltYnVyc2VkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGlzIGxlZ2libGUgYW5kIG9yZ2FuaXplZCBjaHJvbm9sb2dpY2FsbHkuIFRoaXMgd2lsbCBncmVhdGx5IGFzc2lzdCBpbiB0aGUgc3BlZWR5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggZmlsaW5ncyBhbmQgaW4gbWF4aW1pemluZyB5b3VyIGVsaWdpYmxlIGRlZHVjdGlvbnMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2XigJlyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5ITwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgeW91ciBIZWFsdGggU2F2aW5ncyBBY2NvdW50IChIU0EpIGNvbnRyaWJ1dGlvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBIU0EgZGVkdWN0aW9uIGFuZCBlbnN1cmUgd2UgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgSFNBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+QW55IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSB5b3VyIGVtcGxveWVyIHRvIHRoZSBIU0EgKGlmIGFwcGxpY2FibGUpLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMsIGlmIHRoZXkgd2VyZSBub3QgbWFkZSBpbiBhIGx1bXAgc3VtLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIEhTQSBlbGlnaWJpbGl0eSBmb3IgdGhlIHRheCB5ZWFyICh0eXBpY2FsbHksIHRoaXMgaW52b2x2ZXMgcHJvb2Ygb2YgYSBIaWdoIERlZHVjdGlibGUgSGVhbHRoIFBsYW4pLjwvbGk+XHJcbiAgICAgICAgPGxpPlN0YXRlbWVudHMgZnJvbSB5b3VyIEhTQSBwcm92aWRlciBkZXRhaWxpbmcgZGlzdHJpYnV0aW9ucywgaWYgYW55IHdlcmUgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgbWVkaWNhbCBleHBlbnNlcyBwYWlkIG91dCBvZiB0aGUgSFNBLCBpZiBhbnkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGJvdGggdGhlIGFjY3VyYXRlIGZpbGluZyBvZiB5b3VyIHRheGVzIGFuZCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyByZWdhcmRpbmcgSFNBcy4gUGxlYXNlIHJlc3BvbmQgd2l0aCB0aGVzZSBkb2N1bWVudHMgYW5kIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGZvciB0aGUgY3VycmVudCB0YXggeWVhciwgeW91IGluZGljYXRlZCB0aGF0IHlvdSBoYXZlIGluY3VycmVkIG1vdmluZyBleHBlbnNlcyByZWxhdGVkIHRvIGEgcGVybWFuZW50IGNoYW5nZSBvZiBzdGF0aW9uIGFzIGEgbWVtYmVyIG9mIHRoZSBBcm1lZCBGb3JjZXMuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgb2YgeW91ciB0YXggcmV0dXJuIGFuZCB0byBwb3RlbnRpYWxseSBxdWFsaWZ5IGZvciByZWxhdGVkIGRlZHVjdGlvbnMgb3IgZXhjbHVzaW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PGI+T3JkZXJzIGZvciBQZXJtYW5lbnQgQ2hhbmdlIG9mIFN0YXRpb246PC9iPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIG9yZGVycyB0aGF0IGluaXRpYXRlZCB0aGUgbW92ZS4gVGhpcyBzaG91bGQgZGV0YWlsIHRoZSBtb3ZlIGlzIGR1ZSB0byBtaWxpdGFyeSBvcmRlcnMgYW5kIGluZGljYXRlIGJvdGggeW91ciBwcmV2aW91cyBhbmQgbmV3IGR1dHkgc3RhdGlvbnMuPC9saT5cclxuICAgICAgPGxpPjxiPlJlY2VpcHRzIGFuZCBSZWNvcmRzIG9mIE1vdmluZyBFeHBlbnNlczo8L2I+IERldGFpbGVkIHJlY2VpcHRzIG9yIHJlY29yZHMgb2YgYWxsIG1vdmluZy1yZWxhdGVkIGV4cGVuc2VzLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG86XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlRyYW5zcG9ydGF0aW9uIGNvc3RzIChlLmcuLCBjb3N0cyBhc3NvY2lhdGVkIHdpdGggbW92aW5nIGhvdXNlaG9sZCBnb29kcyBhbmQgcGVyc29uYWwgZWZmZWN0cyk8L2xpPlxyXG4gICAgICAgICAgPGxpPlRyYXZlbCBleHBlbnNlcyB0byB0aGUgbmV3IGhvbWUgKGUuZy4sIGxvZGdpbmcgY29zdHMgZW4gcm91dGUsIGJ1dCBub3QgbWVhbHMpPC9saT5cclxuICAgICAgICAgIDxsaT5TdG9yYWdlIGV4cGVuc2VzIGZvciBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMsIGlmIGFwcGxpY2FibGU8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48Yj5MZWFzZSBUZXJtaW5hdGlvbiBEb2N1bWVudGF0aW9uOjwvYj4gSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggYnJlYWtpbmcgYSBsZWFzZSBkdWUgdG8gdGhlIG1vdmUuPC9saT5cclxuICAgICAgPGxpPjxiPlByb29mIG9mIE5ldyBSZXNpZGVuY2U6PC9iPiBBIGRvY3VtZW50IGluZGljYXRpbmcgdGhlIGFkZHJlc3Mgb2YgeW91ciBuZXcgcGVybWFuZW50IHJlc2lkZW5jZS4gVGhpcyBjYW4gaW5jbHVkZSBhIHV0aWxpdHkgYmlsbCwgbmV3IGxlYXNlIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGRvY3VtZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBub3RlLCB0byB0YWtlIGFkdmFudGFnZSBvZiBhbnkgZXhjbHVzaW9ucyBvciBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gQXJtZWQgRm9yY2VzIG1vdmluZyBleHBlbnNlcywgdGhlc2UgZG9jdW1lbnRzIGFyZSBuZWNlc3NhcnkgdG8gdmVyaWZ5IHRoZSBleHBlbnNlcyBpbmN1cnJlZC4gV2UgdW5kZXJzdGFuZCB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGVzZSBkb2N1bWVudHMgYW5kIGFzc3VyZSB5b3UgdGhhdCBhbGwgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2lsbCBiZSBrZXB0IGNvbmZpZGVudGlhbCBhbmQgdXNlZCBleGNsdXNpdmVseSBmb3IgdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSBpbiBwcm92aWRpbmcgdGhlc2UgZG9jdW1lbnRzIHRvIHVzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVkdWN0aWJsZSBTZWxmIEVtcGxveW1lbnQgUGFydCBUYXhlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRGVkdWN0aWJsZSBTZWxmIEVtcGxveW1lbnQgUGFydCBUYXhlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGFkanVzdG1lbnQgZm9yIGhhbGYgb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4LiBUaGlzIGludm9sdmVzIHRoZSBkZWR1Y3Rpb24gb2YgaGFsZiBvZiB0aGUgc2VsZi1lbXBsb3ltZW50IHRheCB5b3UndmUgcGFpZCBmb3IgdGhlIGN1cnJlbnQgeWVhciwgd2hpY2ggY29udHJpYnV0ZXMgdG93YXJkcyB5b3VyIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHRoaXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+U2VsZi1FbXBsb3ltZW50IFRheCBDYWxjdWxhdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBjYWxjdWxhdGlvbiBvZiB5b3VyIHNlbGYtZW1wbG95bWVudCB0YXggZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGEgc3VtbWFyeSBvZiB5b3VyIG5ldCBlYXJuaW5ncyBmcm9tIHNlbGYtZW1wbG95bWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VG90YWwgU2VsZi1FbXBsb3ltZW50IFRheCBQYWlkOjwvc3Ryb25nPiBPZmZpY2lhbCByZWNlaXB0cyBvciBkb2N1bWVudHMgc2hvd2luZyB0aGUgdG90YWwgYW1vdW50IG9mIHNlbGYtZW1wbG95bWVudCB0YXggcGFpZCBmb3IgdGhlIHllYXIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPklkZW50aWZpY2F0aW9uIG9mIFBheW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9yIGxlZGdlcnMgaW5kaWNhdGluZyBwYXltZW50cyBtYWRlIHRvd2FyZHMgU29jaWFsIFNlY3VyaXR5IGFuZCBNZWRpY2FyZSB0aHJvdWdoIHNlbGYtZW1wbG95bWVudCB0YXguPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXhlcyBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIGVudGl0bGVkIGRlZHVjdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFNFUC1JUkEgKFNpbXBsaWZpZWQgRW1wbG95ZWUgUGVuc2lvbiBJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkgdGhpcyB0YXggeWVhciBhcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbC4gRm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNFUC1JUkEgQ29udHJpYnV0aW9uIFN0YXRlbWVudHM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBzdGF0ZW1lbnRzIG9yIHJlY2VpcHRzIHNob3dpbmcgdGhlIGNvbnRyaWJ1dGlvbnMgbWFkZSB0byB5b3VyIFNFUC1JUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFNlbGYtRW1wbG95ZWQgSW5jb21lOjwvc3Ryb25nPiBBcyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9uIGxpbWl0cyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHNlbGYtZW1wbG95ZWQgaW5jb21lLCBwbGVhc2UgZW5zdXJlIHdlIGhhdmUgYWxsIHJlbGV2YW50IGluY29tZSBkb2N1bWVudGF0aW9uLiBUaGlzIG1heSBpbmNsdWRlLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIDEwOTkgZm9ybXMsIHByb2ZpdCBhbmQgbG9zcyBzdGF0ZW1lbnRzLCBhbmQgYnVzaW5lc3MgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U2NoZWR1bGUgQyAoRm9ybSAxMDQwKSBvciBFcXVpdmFsZW50Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBkb25lIHNvLCBwbGVhc2UgcHJvdmlkZSBhIGNvbXBsZXRlZCBTY2hlZHVsZSBDIG9yIGVxdWl2YWxlbnQgZG9jdW1lbnRhdGlvbiB0aGF0IGRldGFpbHMgeW91ciBidXNpbmVzcyBlYXJuaW5ncyBhbmQgZXhwZW5zZXMuIFRoaXMgd2lsbCBoZWxwIGluIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgeW91ciBtYXhpbXVtIGRlZHVjdGlibGUgY29udHJpYnV0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFByaW9yIFllYXIgQ29udHJpYnV0aW9uIERldGFpbHM6PC9zdHJvbmc+IElmIHlvdSBoYXZlIG1hZGUgY29udHJpYnV0aW9ucyBpbiBwcmlvciB5ZWFycyBidXQgaGF2ZW7igJl0IHNoYXJlZCB0aG9zZSBkZXRhaWxzIHdpdGggdXMsIHBsZWFzZSBkbyBzby4gVGhpcyBjYW4gYWZmZWN0IHlvdXIgY3VycmVudCB5ZWFy4oCZcyBjb250cmlidXRpb25zIGFuZCBkZWR1Y3Rpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+Q29ycmVjdGx5IHJlcG9ydGluZyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9ucyBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyB0aGF0IHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSB0YXggZGVkdWN0aW9ucyBhbmQgY29tcGx5IHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseSBhbmQgYWNjdXJhdGVseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBTSU1QTEUgUGxhbiBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGAgICAgPHA+V2UncmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgY29udHJpYnV0ZWQgdG8gYSBTSU1QTEUgSVJBIHBsYW4gYXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZWZsZWN0IHRoZXNlIGNvbnRyaWJ1dGlvbnMgaW4geW91ciB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgU0lNUExFIElSQSB0aGlzIHRheCB5ZWFyOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB0aGUgdG90YWwgc3VtIG9mIHlvdXIgY29udHJpYnV0aW9ucy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBkYXRlczo8L3N0cm9uZz4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggeW91IG1hZGUgdGhlc2UgY29udHJpYnV0aW9ucyB0byB0aGUgU0lNUExFIElSQS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIGNvbnRyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIG9yIHRyYW5zYWN0aW9uIGhpc3RvcmllcyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIHRvIHlvdXIgU0lNUExFIElSQSBhY2NvdW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SVJTIEZvcm0gMTA0MCBTY2hlZHVsZSBDOjwvc3Ryb25nPiBBcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbCwgeW91ciB0YXggcmV0dXJuIHNob3VsZCBpbmNsdWRlIGEgU2NoZWR1bGUgQyBzaG93aW5nIHlvdXIgYnVzaW5lc3MgaW5jb21lIGFuZCBleHBlbnNlcy4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGRldGVybWluaW5nIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCB0aGUgY29udHJpYnV0aW9uIGxpbWl0cyBmb3IgeW91ciBTSU1QTEUgSVJBLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChFSU4pIG9mIHRoZSBTSU1QTEUgSVJBIHBsYW46PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgdGhlIEVJTiBmb3IgeW91ciBTSU1QTEUgSVJBLiBUaGlzIGlzIG5vdCByZXF1aXJlZCBpZiB5b3UgYXJlIHRoZSBzb2xlIGNvbnRyaWJ1dG9yIGFuZCBkbyBub3QgaGF2ZSBhbiBFSU4gc2VwYXJhdGUgZnJvbSB5b3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciByZXRpcmVtZW50IGNvbnRyaWJ1dGlvbnMuIFlvdXIgcHJvbXB0bmVzcyBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGhlbHAgYXZvaWQgZGVsYXlzIGluIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBRdWFsaWZpZWQgUGxhbiBDb250cmlidXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIG5lZWQgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIHNlbGYtZW1wbG95ZWQgcXVhbGlmaWVkIHBsYW4gY29udHJpYnV0aW9ucy4gWW91ciByZXNwb25zZSB0byBvdXIgcXVlc3Rpb24gYWJvdXQgbWFraW5nIGNvbnRyaWJ1dGlvbnMgdG8gYSBxdWFsaWZpZWQgcmV0aXJlbWVudCBwbGFuIGR1cmluZyB0aGlzIHRheCB5ZWFyIG5lY2Vzc2l0YXRlcyBmdXJ0aGVyIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgY29tcHV0ZSBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzIG9yIG9ibGlnYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PGI+Q29uZmlybWF0aW9uIG9mIENvbnRyaWJ1dGlvbiBUeXBlOjwvYj4gQ2xhcmlmeSB0aGUgdHlwZSBvZiBxdWFsaWZpZWQgcmV0aXJlbWVudCBwbGFuIHlvdSBjb250cmlidXRlZCB0byAoZS5nLiwgU29sbyA0MDEoayksIFNFUCBJUkEsIFNJTVBMRSBJUkEpLjwvbGk+XHJcbiAgICA8bGk+PGI+VG90YWwgQW1vdW50IENvbnRyaWJ1dGVkOjwvYj4gU3BlY2lmeSB0aGUgdG90YWwgZG9sbGFyIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgcGxhbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PGI+Q29udHJpYnV0aW9uIERhdGVzOjwvYj4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cclxuICAgIDxsaT48Yj5QbGFuIEFkbWluaXN0cmF0b3I6PC9iPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBwbGFuJ3MgYWRtaW5pc3RyYXRvciwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPGxpPjxiPlByb29mIG9mIENvbnRyaWJ1dGlvbnM6PC9iPiBGb3J3YXJkIGFueSByZWNlaXB0cywgc3RhdGVtZW50cywgb3Igb3RoZXIgZG9jdW1lbnRzIHRoYXQgY2FuIHZlcmlmeSB0aGUgY29udHJpYnV0aW9ucyB5b3UgbWFkZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgcHJvcGVyIHRheCB0cmVhdG1lbnQgZm9yIHRoZXNlIGNvbnRyaWJ1dGlvbnMuIEZhaWx1cmUgdG8gYWNjdXJhdGVseSByZXBvcnQgcmV0aXJlbWVudCBwbGFuIGNvbnRyaWJ1dGlvbnMgY2FuIHJlc3VsdCBpbiBkaXNjcmVwYW5jaWVzIHdpdGggdGhlIElSUyBhbmQgcG90ZW50aWFsbHkgYWZmZWN0IHlvdXIgdGF4IGxpYWJpbGl0eSBvciByZWZ1bmQuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCB1cyB0byBtb3JlIGVmZmljaWVudGx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uIHNlcnZpY2VzLiBUaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91IGluZGljYXRlZCBwYXlpbmcgZm9yIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXMgYXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9ucyBmb3IgeW91ciBoZWFsdGggaW5zdXJhbmNlIGNvc3RzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIDxzdHJvbmc+YWxsIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXM8L3N0cm9uZz4gcGFpZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgbWVkaWNhbCwgZGVudGFsLCBhbmQgbG9uZy10ZXJtIGNhcmUgaW5zdXJhbmNlLiBUaGlzIHNob3VsZCBjb3ZlcjpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91cnNlbGY8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBzcG91c2U8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBkZXBlbmRlbnRzPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBwYXltZW50IGZvciB0aGVzZSBwcmVtaXVtcywgc3VjaCBhczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50czwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBheW1lbnQgcmVjZWlwdHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNhbmNlbGxlZCBjaGVja3M8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgaW5zdXJhbmNlIGNvdmVyYWdlLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5JbnN1cmFuY2UgcG9saWN5IHN0YXRlbWVudHM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvdmVyYWdlIHN1bW1hcmllczwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhlIGluc3VyYW5jZSBwbGFuIGlzIGVzdGFibGlzaGVkIHVuZGVyIHlvdXIgYnVzaW5lc3MgKGZvciBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWxzKS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgeW91ciBkZWR1Y3RpYmxlIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMgYW5kIHJlZ3VsYXRpb25zLiBQbGVhc2Ugc2VuZCB0aGUgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZWQgaW4gYSB0aW1lbHkgbWFubmVyLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybHkgU2F2aW5ncyBXaXRoZHJhd2FsIFBlbmFsdHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVhcmx5IFNhdmluZ3MgV2l0aGRyYXdhbCBQZW5hbHR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBpbmN1cnJlZCBwZW5hbHRpZXMgZHVlIHRvIGVhcmx5IHdpdGhkcmF3YWxzIGZyb20gc2F2aW5ncyBhY2NvdW50cyBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYXNzaXN0IHlvdSBlZmZpY2llbnRseSBhbmQgZW5zdXJlIGFjY3VyYXRlIHRheCBmaWxpbmcsIHdlIGtpbmRseSBhc2sgeW91IHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VGhlIHRvdGFsIGFtb3VudCBvZiBwZW5hbHRpZXM8L3N0cm9uZz4gaW5jdXJyZWQgZnJvbSBlYXJseSB3aXRoZHJhd2Fscy4gVGhpcyBpbmNsdWRlcyBwZW5hbHRpZXMgZnJvbSBjZXJ0aWZpY2F0ZXMgb2YgZGVwb3NpdCBvciBvdGhlciB0aW1lLWJhc2VkIHNhdmluZ3MgYWNjb3VudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBzdGF0ZW1lbnRzPC9zdHJvbmc+IGZyb20geW91ciBmaW5hbmNpYWwgaW5zdGl0dXRpb24gZm9yIGVhY2ggaW5zdGFuY2Ugb2YgZWFybHkgd2l0aGRyYXdhbC4gVGhlc2Ugc3RhdGVtZW50cyBzaG91bGQgaW5jbHVkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBkYXRlIG9mIHdpdGhkcmF3YWw8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgd2l0aGRyYXduIGVhcmx5PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgcGVuYWx0eSBjaGFyZ2VkPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSBwdXJwb3NlIG9mIGVhY2ggd2l0aGRyYXdhbDwvc3Ryb25nPiwgaWYgYXZhaWxhYmxlLiBDZXJ0YWluIHNpdHVhdGlvbnMgbWF5IHByb3ZpZGUgZXhjZXB0aW9ucyB0byBwZW5hbHRpZXMgb24geW91ciB0YXggcmV0dXJuLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSA8c3Ryb25nPmNvcnJlc3BvbmRlbmNlIG9yIGRvY3VtZW50YXRpb248L3N0cm9uZz4gZnJvbSB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uIHJlZ2FyZGluZyB0aGVzZSBwZW5hbHRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gYWNjdXJhdGVseSBhc3Nlc3MgcG9zc2libGUgaW1wYWN0cyBvbiB5b3VyIHRheCBmaWxpbmcgYW5kIGV4cGxvcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBbGltb255IFBhaWRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFsaW1vbnkgUGFpZFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBwcm92aWRpbmcgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZmluYW5jaWFsIGFjdGl2aXRpZXMgb3ZlciB0aGUgcGFzdCB0YXggeWVhci4gQXMgeW91IGluZGljYXRlZCB0aGF0IHlvdSBoYXZlIG1hZGUgYWxpbW9ueSBwYXltZW50cyB1bmRlciBhIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gdG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybi4gVGhlIGRvY3VtZW50YXRpb24gaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeWluZyBhbGxvd2FibGUgZGVkdWN0aW9ucyByZWxhdGVkIHRvIHRoZXNlIHBheW1lbnRzLjwvcD4gXHJcbiAgICA8cD48c3Ryb25nPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyByZWxhdGVkIHRvIHlvdXIgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBzaWduZWQgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudCB0aGF0IHN0YXRlcyB0aGUgYW1vdW50IG9mIGFsaW1vbnkgdG8gYmUgcGFpZCBhbmQgdGhlIHRpbWVsaW5lcy4gUGxlYXNlIGVuc3VyZSB0aGlzIGRvY3VtZW50IGhpZ2hsaWdodHMgdGhlIHNlY3Rpb25zIHJlbGV2YW50IHRvIGFsaW1vbnkgb2JsaWdhdGlvbnMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkIG9mIGFsbCBhbGltb255IHBheW1lbnRzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGF0ZSBvZiBlYWNoIHBheW1lbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCBvZiBlYWNoIHBheW1lbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1ldGhvZCBvZiBwYXltZW50IChlLmcuLCBjaGVjaywgYmFuayB0cmFuc2Zlcik8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIHJlY2lwaWVudDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgYXMgcHJvb2Ygb2YgdGhlIGFsaW1vbnkgcGF5bWVudHMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCBhbnkgZG9jdW1lbnRhdGlvbiBvciBjb3JyZXNwb25kZW5jZSB0aGF0IGluZGljYXRlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBvcmlnaW5hbCBhZ3JlZW1lbnQgYWZmZWN0aW5nIGFsaW1vbnkgcGF5bWVudHMgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgZG9jdW1lbnRhdGlvbiB3aWxsIGhlbHAgZW5zdXJlIHRoYXQgeW91ciB0YXggcmV0dXJuIHJlZmxlY3RzIGFsbCByZWxldmFudCBmaW5hbmNpYWwgYWN0aXZpdGllcyBhbmQgYXNzaXN0cyBpbiBhY2N1cmF0ZWx5IGRldGVybWluaW5nIGFueSB0YXggbGlhYmlsaXRpZXMgb3IgZGVkdWN0aW9ucy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGVzZSBkZXRhaWxzIHdpbGwgYmUgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgd2lsbCBleHBlZGl0ZSB0aGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCBwcmVwYXJhdGlvbnMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgaWYgeW91IG5lZWQgZnVydGhlciBndWlkYW5jZSBvbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLiBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgVHJhZGl0aW9uYWwgSVJBIChJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkuIFRvIGFjY3VyYXRlbHkgY2FwdHVyZSB0aGlzIGluIHlvdXIgdGF4IGZpbGluZyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHdlIHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5Qcm9vZiBvZiBjb250cmlidXRpb24gdG8gdGhlIFRyYWRpdGlvbmFsIElSQSAoc3VjaCBhcyBzdGF0ZW1lbnRzIG9yIHJlY2VpcHRzKS48L2xpPlxyXG4gICAgICA8bGk+WW91ciB5ZWFyLWVuZCBJUkEgc3RhdGVtZW50LjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBwcmV2aW91cyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zIHRvIHlvdXIgSVJBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxyXG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IHdpdGhkcmF3YWxzIG9yIGRpc3RyaWJ1dGlvbnMgdGFrZW4gZHVyaW5nIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgYW5kIGFueSBpbmZvcm1hdGlvbiBvbiBhIHNwb3VzZSdzIElSQSBjb250cmlidXRpb25zIGlmIHlvdSBhcmUgbWFycmllZC48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlscyBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgdGhhdCB3ZSBjYW4gYWNjdXJhdGVseSByZXByZXNlbnQgeW91ciBJUkEgY29udHJpYnV0aW9ucyBhbmQgb3B0aW1pemUgeW91ciBkZWR1Y3Rpb25zLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgdGhlIHBheW1lbnQgb2Ygc3R1ZGVudCBsb2FuIGludGVyZXN0IGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHByb2Nlc3MgdGhpcyBzZWdtZW50IG9mIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIHlvdSBiZW5lZml0IGZyb20gYW55IHBvdGVudGlhbCBTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uLCB3ZSBuZWVkIHlvdSB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OC1FOjwvc3Ryb25nPiBUaGlzIGlzIGEgU3R1ZGVudCBMb2FuIEludGVyZXN0IFN0YXRlbWVudCBpc3N1ZWQgYnkgeW91ciBsb2FuIHNlcnZpY2VyLiBJZiB5b3UndmUgcGFpZCAkNjAwIG9yIG1vcmUgaW4gaW50ZXJlc3QsIHlvdSBzaG91bGQgYXV0b21hdGljYWxseSByZWNlaXZlIGl0LiBQbGVhc2Ugc2NhbiBhbmQgc2VuZCBpdCB0byB1cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxvYW4gU3RhdGVtZW50czo8L3N0cm9uZz4gSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIEZvcm0gMTA5OC1FIG9yIHBhaWQgbGVzcyB0aGFuICQ2MDAgaW4gaW50ZXJlc3QsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIGxvYW4gc3RhdGVtZW50cyBpbmRpY2F0aW5nIHRoZSBpbnRlcmVzdCBwYWlkIG92ZXIgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Qm9ycm93ZXIncyBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB0aGUgU29jaWFsIFNlY3VyaXR5IE51bWJlcnMgYW5kIGZ1bGwgbmFtZXMgb2YgYW55IGluZGl2aWR1YWxzIGZvciB3aG9tIHRoZSBsb2FuIGludGVyZXN0IHdhcyBwYWlkLCBpbmNsdWRpbmcgeW91cnNlbGYsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudHMgb24gU29tZW9uZSBFbHNlJ3MgQmVoYWxmOjwvc3Ryb25nPiBJZiB5b3UncmUgbm90IGxlZ2FsbHkgb2JsaWdhdGVkIHRvIG1ha2UgaW50ZXJlc3QgcGF5bWVudHMgb24gdGhlIGxvYW4gYnV0IGhhdmUgZG9uZSBzbyBhbnl3YXksIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyByZWZsZWN0aW5nIHRoaXMgcGF5bWVudC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgZGVkdWN0aW9uIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBhZHZhbnRhZ2VzLCBhbmQgd2UncmUgaGVyZSB0byBoZWxwIHlvdSBtYXhpbWl6ZSB5b3VyIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb2FjdGl2ZSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBzZXJ2ZSB5b3UgYmV0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcmNoZXIgTVNBIERlZHVjdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJjaGVyIE1TQSBEZWR1Y3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGVkIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBjb250cmlidXRpb25zIHRvIGFuIEFyY2hlciBNZWRpY2FsIFNhdmluZ3MgQWNjb3VudCAoTVNBKSB3aXRoaW4gdGhpcyB0YXggeWVhciwgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgY29udHJpYnV0aW9ucyBpbiB5b3VyIHRheCByZXR1cm4sIGFuZCB0byBtYXhpbWl6ZSB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIHNwZWNpZmljczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSA1NDk4LVNBOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgRm9ybSA1NDk4LVNBLCBpZiByZWNlaXZlZCwgd2hpY2ggc2hvd3MgdGhlIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgQXJjaGVyIE1TQSB0aGlzIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBvciBGaW5hbmNpYWwgU3RhdGVtZW50czo8L3N0cm9uZz4gSWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgRm9ybSA1NDk4LVNBLCBiYW5rIG9yIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiBzdGF0ZW1lbnRzIHNob3dpbmcgeW91ciBjb250cmlidXRpb25zIHRvIHRoZSBNU0EgYXJlIHJlcXVpcmVkLiBFbnN1cmUgdGhlc2UgY2xlYXJseSBoaWdobGlnaHQgdGhlIGNvbnRyaWJ1dGlvbiBhbW91bnRzIGFuZCBkYXRlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEhpZ2gtRGVkdWN0aWJsZSBIZWFsdGggUGxhbjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB5b3UgYXJlIGNvdmVyZWQgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRoaXMgY291bGQgaW5jbHVkZSBpbnN1cmFuY2Ugc3RhdGVtZW50cyBvciBwb2xpY3kgZG9jdW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgYW5kIEFjY291bnQgSW5mb3JtYXRpb246PC9zdHJvbmc+IENvbmZpcm0gdGhlIGFjY291bnQgaG9sZGVyJ3MgZnVsbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyLCBhbG9uZ3NpZGUgdGhlIEFyY2hlciBNU0EgYWNjb3VudCBudW1iZXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIGRlZHVjdGlvbiBwcm9jZXNzIGFuZCBhZGhlcmUgdG8gSVJTIGd1aWRlbGluZXMsIGtpbmRseSBzdWJtaXQgdGhlIG91dGxpbmVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlPC9zdHJvbmc+LiBFYXJseSBzdWJtaXNzaW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlLjwvcD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoZXNlIHJlcXVpcmVtZW50cyB3aWxsIGRpcmVjdGx5IGltcGFjdCB0aGUgZWZmaWNpZW5jeSBhbmQgYWNjdXJhY3kgb2YgeW91ciB0YXggcmV0dXJuIHByb2Nlc3NpbmcuIFNob3VsZCB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgZG9jdW1lbnRhdGlvbiwgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIFdyaXRlLUluIEFkanVzdG1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZXhwZW5zZXMgb3IgYWRqdXN0bWVudHMgdGhhdCBjb3VsZCBpbXBhY3QgeW91ciB0YXhhYmxlIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBmdWxseSBsZXZlcmFnZSBhbGwgcG9zc2libGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGVzZSBpdGVtcy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggc3BlY2lmaWVkIGRlZHVjdGlvbiBvciBhZGp1c3RtZW50OjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgRXhwZW5zZSBvciBBZGp1c3RtZW50Ojwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggaXRlbSB5b3UgYmVsaWV2ZSBzaG91bGQgYmUgY29uc2lkZXJlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudDo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBwYWlkIG9yIGluY3VycmVkIGZvciBlYWNoIG9mIHRoZXNlIGV4cGVuc2VzIG9yIGFkanVzdG1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQ29waWVzIG9mIHJlY2VpcHRzLCBpbnZvaWNlcywgbGVnYWwgZG9jdW1lbnRzLCBvciBvdGhlciBzdXBwb3J0aW5nIGV2aWRlbmNlIHRoYXQgdmFsaWRhdGUgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudC4gVGhpcyBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggSVJTIHJlcXVpcmVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUGF5bWVudCBvciBJbmN1cnJlbmNlOjwvc3Ryb25nPiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZCBvciB0aGUgYWRqdXN0bWVudCBvY2N1cnJlZC4gVGhpcyBpcyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIHRheCB5ZWFyIGluIHdoaWNoIHRoZSBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudCBhcHBsaWVzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBFeHBsYW5hdGlvbjo8L3N0cm9uZz4gQW55IG90aGVyIHJlbGV2YW50IGluZm9ybWF0aW9uIHRoYXQgY291bGQgaGVscCB1cyB1bmRlcnN0YW5kIGhvdyB0aGUgZXhwZW5zZSBvciBhZGp1c3RtZW50IGlzIGp1c3RpZmllZCB1bmRlciBJUlMgcnVsZXMgYW5kIHJlZ3VsYXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFyZSBwcm92aWRlZCBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGVmZmljaWVudCBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvbnN0aXR1dGVzIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC4gV2UgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTWVkaWNhbCBhbmQgRGVudGFsIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FsIGFuZCBEZW50YWwgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3Ugb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgaW5jdXJyZWQgc2lnbmlmaWNhbnQgbWVkaWNhbCBvciBkZW50YWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIgdGhhdCB3ZXJlIG5vdCByZWltYnVyc2VkIGJ5IGluc3VyYW5jZSBvciBvdGhlciBoZWFsdGggcGxhbnMuIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHJlY2VpcHRzIG9yIHN0YXRlbWVudHMgZm9yIGFsbCBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgaW5jdXJyZWQgZm9yIHlvdXJzZWxmIGFuZCBhbnkgZGVwZW5kZW50cy4gVGhpcyBpbmNsdWRlcyBwYXltZW50cyBmb3I6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N0b3JzIGFuZCBkZW50aXN0czwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+U3VyZ2VvbnM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlByZXNjcmlwdGlvbnM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1lZGljYWwgZXF1aXBtZW50IGRlZW1lZCBuZWNlc3Nhcnk8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBvdGhlciBoZWFsdGgtcmVsYXRlZCBleHBlbnNlcyBub3QgbGlzdGVkIHRoYXQgeW91IGJlbGlldmUgbWF5IGJlIHJlbGV2YW50PC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgc2hvd2luZyBhbnkgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgZnJvbSBpbnN1cmFuY2Ugb3IgaGVhbHRoIHBsYW5zIGZvciB0aGVzZSBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5BIGxpc3Qgb2YgZGVwZW5kZW50cyBmb3Igd2hvbSB0aGVzZSBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIHJlY29yZHMgb2YgdHJhdmVsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gbWVkaWNhbCBjYXJlLCBpbmNsdWRpbmcgbWlsZWFnZSwgcGFya2luZywgYW5kIHRvbGxzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SGF2aW5nIHRoZXNlIGRvY3VtZW50cyByZWFkeSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudGVkIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhhdCB3ZSBjYW4gbWF4aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIHJlbGF0ZWQgdG8gdGhlc2UgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgb3IgY29udGFjdCB1cyB0byBzY2hlZHVsZSBhIG1lZXRpbmcgdG8gZGlzY3VzcyB0aGVzZSBpbiBmdXJ0aGVyIGRldGFpbC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU0FMVCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU0FMVCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIG5lZWQgdG8gY29tcGlsZSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBTdGF0ZSBhbmQgTG9jYWwgVGF4ZXMgKFNBTFQpIGV4cGVuc2VzLiBBY2NvcmRpbmcgdG8geW91ciByZWNlbnQgc3VibWlzc2lvbiwgeW91IGluZGljYXRlZCBoYXZpbmcgcGFpZCBzaWduaWZpY2FudCBhbW91bnRzIGluIHRoZXNlIHRheGVzIG92ZXIgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBjYW4gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCBwb3NzaWJsZSBzZXJ2aWNlIGFuZCBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PGI+U3VtbWFyeSBvZiBTdGF0ZSBhbmQgTG9jYWwgSW5jb21lIFRheGVzOjwvYj4gXHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlctMiBmb3JtcyBzaG93aW5nIHN0YXRlIGFuZCBsb2NhbCBpbmNvbWUgdGF4ZXMgd2l0aGhlbGQuPC9saT5cclxuICAgICAgICAgIDxsaT5Fc3RpbWF0ZWQgdGF4IHBheW1lbnQgcmVjZWlwdHMgdG8gc3RhdGUgYW5kIGxvY2FsIGdvdmVybm1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxiPlByb3BlcnR5IFRheGVzOjwvYj5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+QW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGZvciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlLCB2YWNhdGlvbiBob21lcywgYW5kIGFueSBvdGhlciByZWFsIGVzdGF0ZSBvd25lZC48L2xpPlxyXG4gICAgICAgICAgPGxpPlZlaGljbGUgcmVnaXN0cmF0aW9uIGRvY3VtZW50cyBzaG93aW5nIHBhaWQgcHJvcGVydHkgdGF4IGFtb3VudHMuPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PGI+U2FsZXMgVGF4ZXM6PC9iPiAoSWYgeW91IGVsZWN0ZWQgdG8gZGVkdWN0IHNhbGVzIHRheGVzIGluc3RlYWQgb2YgaW5jb21lIHRheGVzKVxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvZiBzaWduaWZpY2FudCBwdXJjaGFzZXMgKGUuZy4sIHZlaGljbGUsIGJvYXQsIGhvbWUgcmVub3ZhdGlvbiBtYXRlcmlhbHMpLjwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gb3Igc3VtbWFyeSBvZiB0b3RhbCBzYWxlcyB0YXhlcyBwYWlkIGlmIHlvdSBrZXB0IGEgZGV0YWlsZWQgcmVjb3JkLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgZGF0ZWQgd2l0aGluIHRoZSBsYXN0IHRheCB5ZWFyLiBQcm92aWRpbmcgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHdpbGwgZXhwZWRpdGUgdGhlIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBoZWxwIHVzIGlkZW50aWZ5IGVsaWdpYmxlIGRlZHVjdGlvbnMgdG8gb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRlZHVjdGlibGUgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5lZWQgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGRlZHVjdGlibGUgaW50ZXJlc3QgZXhwZW5zZXMuIFRoaXMgaXMgaW4gcmVsYXRpb24gdG8gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlZCBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW9ydGdhZ2UgaW50ZXJlc3QsIGxhdGUgZmVlcywgb3IgcG9pbnRzIG9uIGEgaG9tZSBsb2FuIHRoaXMgeWVhciBmb3IgZWl0aGVyIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugb3IgYSBzZWNvbmQgaG9tZS4gVGhlc2UgZXhwZW5zZXMgbWF5IHNpZ25pZmljYW50bHkgcmVkdWNlIHlvdXIgdGF4YWJsZSBpbmNvbWUsIGVuc3VyaW5nIGEgZmF2b3JhYmxlIHRheCBvdXRjb21lIGZvciB5b3UuPC9wPlxyXG5cclxuICAgIDxoMj5SZXF1aXJlZCBEb2N1bWVudGF0aW9uPC9oMj5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIFxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+TW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50cyAoRm9ybSAxMDk4KTwvc3Ryb25nPjogRm9yIGVhY2ggcHJvcGVydHkgeW91IG93bi4gVGhpcyBpbmNsdWRlcyB5b3VyIHByaW1hcnkgaG9tZSBhbmQgYW55IHNlY29uZCBob21lcyBvciByZW50YWwgcHJvcGVydGllcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SG9tZSBFcXVpdHkgTG9hbiBJbnRlcmVzdDwvc3Ryb25nPjogSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBmb3IgaW50ZXJlc3QgcGFpZCBvbiBob21lIGVxdWl0eSBsb2Fucy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBJbnRlcmVzdCBFeHBlbnNlczwvc3Ryb25nPjogSWYgeW91IGhhdmUgaW5jdXJyZWQgYW55IGludmVzdG1lbnQgaW50ZXJlc3QgZXhwZW5zZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgb3IgYWNjb3VudCBzdW1tYXJpZXMgc2hvd2luZyB0aGUgaW50ZXJlc3QgcGFpZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UG9pbnRzIFBhaWQ8L3N0cm9uZz46IERvY3VtZW50YXRpb24gZGV0YWlsaW5nIHBvaW50cyBwYWlkIGlmIHlvdSBwdXJjaGFzZWQgb3IgcmVmaW5hbmNlZCBhIGhvbWUgdGhpcyB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+TGF0ZSBQYXltZW50IEZlZXM8L3N0cm9uZz4gb24gTW9ydGdhZ2U6IElmIGFueSwgZG9jdW1lbnRhdGlvbiBvZiBsYXRlIHBheW1lbnQgZmVlcyBhc3NvY2lhdGVkIHdpdGggeW91ciBob21lIGxvYW4ocykuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UbyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgYWNjdXJhdGVseSBhbmQgZmlsZWQgb24gdGltZSwgd2Uga2luZGx5IGFzayB0aGF0IHlvdSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLiBJZiB5b3UgZm9yZXNlZSBhbnkgZGVsYXlzIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBjb250YWN0IHVzIGltbWVkaWF0ZWx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBhcHByZWNpYXRlIHRoZSBvcHBvcnR1bml0eSB0byBzZXJ2ZSB5b3UgYW5kIGFyZSBoZXJlIHRvIGFzc2lzdCB3aXRoIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMgeW91IG1heSBoYXZlLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGFyaXRhYmxlIENvbnRyaWJ1dGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNoYXJpdGFibGUgQ29udHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgbWFkZSBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlc2UgY29udHJpYnV0aW9ucyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TGlzdCBvZiBDaGFyaXRhYmxlIE9yZ2FuaXphdGlvbnM6PC9zdHJvbmc+IE5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGhhdmUgZG9uYXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBEYXRlczo8L3N0cm9uZz4gRGF0ZXMgb24gd2hpY2ggZWFjaCBkb25hdGlvbiB3YXMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvbmF0aW9uIEFtb3VudHM6PC9zdHJvbmc+IFxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGNhc2ggZG9uYXRpb25zLCB0aGUgZXhhY3QgYW1vdW50IGRvbmF0ZWQgdG8gZWFjaCBvcmdhbml6YXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIGl0ZW1zIGRvbmF0ZWQgYXQgdGhlIHRpbWUgb2YgZG9uYXRpb24uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIERvbmF0aW9uOjwvc3Ryb25nPiBcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIGZvciBjYXNoIGRvbmF0aW9ucy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkZvciBkb25hdGlvbnMgb2YgZ29vZHMsIGFueSBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHRoZSB2YWx1YXRpb24gYW5kIGNvbmRpdGlvbiBvZiB0aGUgaXRlbXMgYXQgdGhlIHRpbWUgb2YgZG9uYXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5CYW5rIHN0YXRlbWVudHMgb3IgY2FuY2VsbGVkIGNoZWNrcyBjYW4gYWxzbyBzZXJ2ZSBhcyBwcm9vZiBmb3IgY2FzaCBkb25hdGlvbnMsIGlmIHJlY2VpcHRzIGFyZSBub3QgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDgyODM6PC9zdHJvbmc+IElmIGFueSBzaW5nbGUgZG9uYXRpb24gb2YgZ29vZHMgZXhjZWVkcyAkNTAwIGluIHZhbHVlLCBwbGVhc2UgY29tcGxldGUgU2VjdGlvbiBBIG9mIEZvcm0gODI4My4gSWYgdGhlIHRvdGFsIHZhbHVlIG9mIGdvb2RzIGRvbmF0ZWQgZXhjZWVkcyAkNSwwMDAsIGEgcXVhbGlmaWVkIGFwcHJhaXNhbCBpcyByZXF1aXJlZCBhbmQgc2hvdWxkIGJlIHByb3ZpZGVkIGFsb25nIHdpdGggU2VjdGlvbiBCIG9mIEZvcm0gODI4MyBjb21wbGV0ZWQuPC9saT5cclxuICAgIDwvb2w+XHJcblxyXG4gICAgPHA+Q29ycmVjdCBhbmQgY29tcGxldGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMuIFBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLCBhbGxvd2luZyB1cyB0byBwcm9jZXNzIHlvdXIgdGF4IGZvcm1zIGFjY3VyYXRlbHkgYW5kIHByb21wdGx5LjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRvbmF0ZWQgUHJvcGVydHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgUHJvcGVydHlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5mb3JtaW5nIHVzIGFib3V0IHlvdXIgZG9uYXRlZCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRvY3VtZW50IGFuZCBjbGFpbSB0aGVzZSBkb25hdGlvbnMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgZG9uYXRlZCBwcm9wZXJ0eSAoZS5nLiwgZnVybml0dXJlLCBjbG90aGluZywgZWxlY3Ryb25pY3MpLjwvbGk+XHJcbiAgICAgICAgPGxpPk5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGRvbmF0ZWQuPC9saT5cclxuICAgICAgICA8bGk+VGhlIGRhdGUgb2YgZWFjaCBkb25hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGF0IHRoZSB0aW1lIG9mIHRoZSBkb25hdGlvbi4gSWYgcG9zc2libGUsIGluY2x1ZGUgaG93IHlvdSBkZXRlcm1pbmVkIHRoaXMgdmFsdWUuPC9saT5cclxuICAgICAgICA8bGk+QW55IGFja25vd2xlZGdtZW50IG9yIHJlY2VpcHQgcmVjZWl2ZWQgZnJvbSB0aGUgb3JnYW5pemF0aW9uLiBQbGVhc2UgZW5zdXJlIGl0IGluY2x1ZGVzIHRoZSBvcmdhbml6YXRpb27igJlzIG5hbWUsIGRvbmF0aW9uIGRhdGUsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIGl0ZW1zLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIGFueSBzaW5nbGUgZG9uYXRpb24gZXhjZWVkZWQgJDUwMCBpbiB2YWx1ZSwgcGxlYXNlIHByb3ZpZGUgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgdGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBob3cgdGhlIHZhbHVlIHdhcyBkZXRlcm1pbmVkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBzbyB3ZSBjYW4gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHlvdXIgZ2VuZXJvdXMgY29udHJpYnV0aW9ucy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgZG9uYXRpb25zLCBvcmdhbml6aW5nIHRoaXMgaW5mb3JtYXRpb24gY2hyb25vbG9naWNhbGx5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFZlaGljbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydHMgaW4gc3VwcG9ydGluZyBjaGFyaXRhYmxlIGNhdXNlcyB0aHJvdWdoIHlvdXIgZ2VuZXJvdXMgdmVoaWNsZSBkb25hdGlvbi4gVG8gYWNjdXJhdGVseSBkb2N1bWVudCB0aGlzIGRvbmF0aW9uIGZvciB5b3VyIHRheCByZWNvcmRzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPkNoYXJpdHkgSW5mb3JtYXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+TmFtZSBvZiB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5DaGFyaXR5J3MgdGF4LWV4ZW1wdCBJRCBudW1iZXI8L2xpPlxyXG4gICAgICAgICAgICA8bGk+QWRkcmVzcyBhbmQgcGhvbmUgbnVtYmVyIG9mIHRoZSBjaGFyaXR5PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlZlaGljbGUgSW5mb3JtYXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+TWFrZSwgbW9kZWwsIGFuZCB5ZWFyIG9mIHRoZSBkb25hdGVkIHZlaGljbGU8L2xpPlxyXG4gICAgICAgICAgICA8bGk+VklOIChWZWhpY2xlIElkZW50aWZpY2F0aW9uIE51bWJlcik8L2xpPlxyXG4gICAgICAgICAgICA8bGk+QSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgdmVoaWNsZSdzIGNvbmRpdGlvbiBhdCB0aGUgdGltZSBvZiBkb25hdGlvbjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZG9uYXRpb24gcmVjZWlwdCBwcm92aWRlZCBieSB0aGUgY2hhcml0eTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5Gb3JtIDEwOTgtQyAoQ29udHJpYnV0aW9ucyBvZiBNb3RvciBWZWhpY2xlcywgQm9hdHMsIGFuZCBBaXJwbGFuZXMpIGlmIHJlY2VpdmVkPC9saT5cclxuICAgICAgICAgICAgPGxpPkFueSB3cml0dGVuIGFja25vd2xlZGdtZW50cyBvciBjb21tdW5pY2F0aW9ucyBmcm9tIHRoZSBjaGFyaXR5PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgc21vb3RoIHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJucy48L3A+XHJcbiAgICA8cD5TaG91bGQgeW91IG5lZWQgYW55IGFzc2lzdGFuY2Ugb3IgaGF2ZSBxdWVzdGlvbnMgcmVnYXJkaW5nIHlvdXIgZG9uYXRpb24gcmVjb3JkcywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIEl0ZW1pemVkIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJPdGhlciBJdGVtaXplZCBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhZGRpdGlvbmFsIGluZGl2aWR1YWwsIG5vbi1idXNpbmVzcyBleHBlbnNlcyB5b3UndmUgaW5jdXJyZWQgdGhpcyB0YXggeWVhciwgd2hpY2ggbWF5IHF1YWxpZnkgZm9yIGl0ZW1pemVkIGRlZHVjdGlvbnMuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgZXhwZW5zZXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGZpbmQgYmVsb3cgYSBndWlkZWxpbmUgb2YgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50cyB3ZSBhcmUgbG9va2luZyBmb3I6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBFeHBlbnNlOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhwZW5zZSwgaW5jbHVkaW5nIHRoZSBwdXJwb3NlIGFuZCB3aHkgeW91IGJlbGlldmUgaXQgcXVhbGlmaWVzIGZvciBhbiBpdGVtaXplZCBkZWR1Y3Rpb24uPC9saT5cclxuICAgICAgICA8bGk+QW1vdW50IFBhaWQ6IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBmb3IgZWFjaCBleHBlbnNlLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGVzOiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZC48L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiBQYXltZW50OiBSZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBvciBjcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgdGhlc2UgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+TGVnYWwgb3IgRmluYW5jaWFsIEFkdmlzb3IgU3RhdGVtZW50czogSWYgYXBwbGljYWJsZSwgc3RhdGVtZW50cyBvciBsZXR0ZXJzIGZyb20gbGVnYWwgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHN1cHBvcnRpbmcgdGhlIGRlZHVjdGliaWxpdHkgb2YgdGhlIGV4cGVuc2UuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5FeGFtcGxlcyBvZiBzdWNoIGV4cGVuc2VzIG1pZ2h0IGluY2x1ZGUgYnV0IGFyZSBub3QgbGltaXRlZCB0bzpcclxuICAgIDx1bD5cclxuICAgICAgICA8bGk+TWVkaWNhbCBleHBlbnNlcyBub3QgY292ZXJlZCBieSBoZWFsdGggaW5zdXJhbmNlPC9saT5cclxuICAgICAgICA8bGk+SW52ZXN0bWVudCBhbmQgZmluYW5jaWFsIGFkdmlzb3IgZmVlczwvbGk+XHJcbiAgICAgICAgPGxpPlRheCBwcmVwYXJhdGlvbiBmZWVzPC9saT5cclxuICAgICAgICA8bGk+U2FmZSBkZXBvc2l0IGJveCByZW50YWxzPC9saT5cclxuICAgIDwvdWw+PC9wPlxyXG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIHJlY2VpdmUgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aGUgdGltZWx5IGFuZCBlZmZpY2llbnQgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgcXVhbGlmaWVzIGFzIGFuIG90aGVyIGl0ZW1pemVkIGV4cGVuc2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hpbGQgRGVwZW5kZW50IENhcmUgQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgY29uZmlybWluZyB0aGF0IHlvdSBwYWlkIGZvciBkZXBlbmRlbnQgY2FyZSBzZXJ2aWNlcyBsYXN0IHllYXIgdG8gZW5hYmxlIHlvdSB0byB3b3JrIG9yIHNlYXJjaCBmb3IgZW1wbG95bWVudC4gVG8gYWNjdXJhdGVseSBjbGFpbSB0aGUgPHN0cm9uZz5DaGlsZCBhbmQgRGVwZW5kZW50IENhcmUgQ3JlZGl0PC9zdHJvbmc+IG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgZnVsbCBuYW1lKHMpIGFuZCBzb2NpYWwgc2VjdXJpdHkgbnVtYmVyKHMpIChTU04pIG9mIHRoZSBkZXBlbmRlbnQocykgY2FyZWQgZm9yLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgcGFpZCBmb3IgZWFjaCBkZXBlbmRlbnTigJlzIGNhcmUgc2VydmljZXMuPC9saT5cclxuICAgICAgICA8bGk+TmFtZSwgYWRkcmVzcywgYW5kIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOIG9yIFNTTikgb2YgdGhlIGNhcmUgcHJvdmlkZXIocykuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudChzKSBtYWRlIHRvIHRoZSBjYXJlZ2l2ZXIocyksIHN1Y2ggYXMgcmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIHRoZSBkZXBlbmRlbnQgaXMgYSBkaXNhYmxlZCBhZHVsdCwgcGxlYXNlIHByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGVpciBjb25kaXRpb24gdG8gY29uZmlybSBlbGlnaWJpbGl0eS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgYXBwbGljYWJsZSBkYXRlcyBkdXJpbmcgd2hpY2ggdGhlIGNhcmUgd2FzIHByb3ZpZGVkLCBlc3BlY2lhbGx5IGlmIHRoZSBjYXJlIHdhcyBub3QgZm9yIHRoZSBmdWxsIHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gZW5zdXJlIHdlIGNhbiBtYXhpbWl6ZSB5b3VyIGVsaWdpYmxlIGNyZWRpdCBhbmQgY29tcGx5IHdpdGggdGhlIElSUyByZXF1aXJlbWVudHMuIFNob3VsZCB5b3UgaGF2ZSBjb25jZXJucyBhYm91dCBnYXRoZXJpbmcgYW55IG9mIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRhdGlvbiwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBmb3IgYXNzaXN0YW5jZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIHRvIGFjaGlldmUgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBvbiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNoaWxkIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBleGFtaW5pbmcgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGhlIDxzdHJvbmc+Q2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiwgYmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZGVwZW5kZW50cyB1bmRlciB0aGUgYWdlIG9mIDE3LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltaXplZCB0YXggYmVuZWZpdHMsIGtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkZ1bGwgbmFtZShzKSBvZiB0aGUgY2hpbGQgb3IgY2hpbGRyZW4uPC9saT5cclxuICAgICAgICA8bGk+RGF0ZShzKSBvZiBiaXJ0aCBmb3IgZWFjaCBjaGlsZC48L2xpPlxyXG4gICAgICAgIDxsaT5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyKHMpIGZvciBlYWNoIGNoaWxkLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgc3RhdGVtZW50IGNvbmZpcm1pbmcgdGhlIGNoaWxkIG9yIGNoaWxkcmVuIGxpdmVkIHdpdGggeW91IGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgbGFzdCB5ZWFyLiBJZiBhcHBsaWNhYmxlLCBwbGVhc2UgaW5jbHVkZSBkb2N1bWVudGF0aW9uIG9mIGN1c3RvZHkgYXJyYW5nZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgb3ZlcnZpZXcgb2YgaG93IHlvdSBwcm92aWRlZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGVpciBmaW5hbmNpYWwgc3VwcG9ydCBsYXN0IHllYXIuIFRoaXMgY2FuIGluY2x1ZGUgcmVjb3JkcyBvZiBob3VzaW5nLCBmb29kLCBlZHVjYXRpb24sIG1lZGljYWwgY2FyZSwgYW5kIG90aGVyIHJlbGV2YW50IGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLCBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgdG8gYXNzaXN0IGluIGV2YWx1YXRpbmcgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbCBwaGFzZS1vdXRzIGJhc2VkIG9uIGluY29tZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFzIHNvb24gYXMgcG9zc2libGUuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgYWlkIGluIHRoZSBzd2lmdCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIHRoYXQgeW91IHJlY2VpdmUgYWxsIGVsaWdpYmxlIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWRkaXRpb25hbCBDaGlsZCBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBZGRpdGlvbmFsIENoaWxkIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgbWF5IHF1YWxpZnkgZm9yIHRoZSA8c3Ryb25nPkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiBiYXNlZCBvbiB5b3VyIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBRdWFsaWZ5aW5nIENoaWxkcmVuOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgU29jaWFsIFNlY3VyaXR5IGNhcmRzIGFuZCBiaXJ0aCBjZXJ0aWZpY2F0ZXMgZm9yIGVhY2ggb2YgeW91ciBxdWFsaWZ5aW5nIGNoaWxkcmVuIHVuZGVyIHRoZSBhZ2Ugb2YgMTcuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZ1cm5pc2ggYWxsIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBwcm9vZiBvZiBpbmNvbWUgdG8gY29uZmlybSB5b3UgaGF2ZSBlYXJuZWQgYXQgbGVhc3QgJDIsNTAwLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXLigJlzIFRheCBSZXR1cm46PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIGxhc3QgeWVhcidzIHRheCByZXR1cm4gdG8gdmVyaWZ5IHRoZSBDaGlsZCBUYXggQ3JlZGl0IGFtb3VudCB5b3UgcmVjZWl2ZWQgb3Igd2VyZSBlbGlnaWJsZSB0byByZWNlaXZlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPklSUyBMZXR0ZXIgNjQxOTo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSB0aGUgSVJTIExldHRlciA2NDE5IGZvciB0aGUgdGF4IHllYXIgcmVnYXJkaW5nIHRoZSBhZHZhbmNlIENoaWxkIFRheCBDcmVkaXQgcGF5bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIHByb2Nlc3MsIHdlIGtpbmRseSBhc2sgeW91IHRvIHNlbmQgdGhlIGFib3ZlIGFzIHNvb24gYXMgcG9zc2libGUsIGVuc3VyaW5nIGFsbCBzdWJtaXNzaW9ucyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGFyZSBjb21taXR0ZWQgdG8gc2VydmluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBuZWVkcyBlZmZpY2llbnRseSBhbmQgc2VjdXJpbmcgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBmb3IgeW91IGFuZCB5b3VyIGZhbWlseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGljZWQgeW91IGluZGljYXRlZCBoYXZpbmcgZGVwZW5kZW50cyB0aGF0IG1heSBxdWFsaWZ5IGZvciB0aGUgPHN0cm9uZz5DcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHM8L3N0cm9uZz4uIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgeW91ciBlbGlnaWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBkZXBlbmRlbnRzLjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPkZ1bGwgbmFtZSBvZiBlYWNoIGRlcGVuZGVudC48L2xpPlxyXG4gICAgICA8bGk+VGhlaXIgcmVsYXRpb25zaGlwIHRvIHlvdSAoZS5nLiwgcGFyZW50LCBzaWJsaW5nLCBhZHVsdCBjaGlsZCwgb3Igb3RoZXIpLjwvbGk+XHJcbiAgICAgIDxsaT5UaGVpciBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9yIEluZGl2aWR1YWwgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChJVElOKS48L2xpPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLiBQbGVhc2UgcHJvdmlkZSBhbnkgcmVsZXZhbnQgZGV0YWlscyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhpcyBjbGFpbSAoaWYgYXZhaWxhYmxlKS48L2xpPlxyXG4gICAgICA8bGk+RGV0YWlsZWQgbGlzdCBvZiB0aGUgZmluYW5jaWFsIHN1cHBvcnQgeW91IHByb3ZpZGVkLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGZvb2QsIHNoZWx0ZXIsIGNsb3RoaW5nLCBtZWRpY2FsIGNhcmUsIGVkdWNhdGlvbiwgYW5kIHRyYW5zcG9ydGF0aW9uIGNvc3RzLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgaW5jb21lIGluZm9ybWF0aW9uIGZvciBlYWNoIGRlcGVuZGVudC4gVGhpcyBpbmNsdWRlcyBpbmNvbWUgc3RhdGVtZW50cyBvciBhbiBhZmZpcm1hdGlvbiB0aGF0IHRoZXkgaGFkIG5vIGluY29tZS48L2xpPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBhcmUgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4gb2YgdGhlIFVuaXRlZCBTdGF0ZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugc2VuZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD4gXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UncmUgaGVyZSB0byBoZWxwIG1ha2UgeW91ciB0YXggZmlsaW5nIHByb2Nlc3MgYXMgc21vb3RoIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkb3B0aW9uIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQWRvcHRpb24gQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBoYXZpbmcgZXhwZW5zZXMgcmVsYXRlZCB0byBhZG9wdGluZyBhIGNoaWxkIGxhc3QgeWVhci4gVG8gYWNjdXJhdGVseSBjbGFpbSB0aGUgQWRvcHRpb24gQ3JlZGl0IG9uIHlvdXIgdGF4IHJldHVybnMsIHdlIHJlcXVpcmUgc3BlY2lmaWMgZG9jdW1lbnRhdGlvbi48L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5GaW5hbGl6ZWQgQWRvcHRpb24gRGVjcmVlIG9yIENlcnRpZmljYXRlLjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxlZCBMZWdhbCBGZWVzIEludm9pY2UgKGluY2x1ZGluZyB0aGUgYXR0b3JuZXnigJlzIG5hbWUsIGFkZHJlc3MsIGFuZCB0aGUgZGF0ZSBvZiBzZXJ2aWNlKS48L2xpPlxyXG4gICAgICA8bGk+Q291cnQgQ29zdHMgUmVjZWlwdHMuPC9saT5cclxuICAgICAgPGxpPlRyYXZlbCBFeHBlbnNlcyBSZWNlaXB0cyAoYWlyZmFyZSwgaG90ZWwsIG1lYWxzKSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhZG9wdGlvbiBwcm9jZXNzLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcmVsZXZhbnQgZG9jdW1lbnRzIGZvciBhIGNoaWxkIHdpdGggc3BlY2lhbCBuZWVkcywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICA8bGk+Rm9yZWlnbiBhZG9wdGlvbjogUHJvdmlkZSB0aGUgY291bnRyeSdzIGxlZ2FsIGRvY3VtZW50YXRpb24gcHJvdmluZyB0aGUgYWRvcHRpb24gd2FzIGZpbmFsaXplZC48L2xpPlxyXG4gICAgICA8bGk+SVJTIEZvcm0gODgzOSwgUXVhbGlmaWVkIEFkb3B0aW9uIEV4cGVuc2VzIChpZiB5b3UgaGF2ZSBhbHJlYWR5IGF0dGVtcHRlZCB0byBjb21wbGV0ZSB0aGlzKS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIEluY29tcGxldGUgb3IgdW5jbGVhciBkb2N1bWVudGF0aW9uIG1heSBkZWxheSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRoZSBwb3RlbnRpYWwgY3JlZGl0LjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBhc3Npc3QgeW91IGluIG1heGltaXppbmcgeW91ciBiZW5lZml0cyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5CYXNlZCBvbiB5b3VyIGFmZmlybWF0aXZlIHJlc3BvbnNlIHJlZ2FyZGluZyBleHBlbnNlcyBwYWlkIGxhc3QgeWVhciBmb3IgY29sbGVnZSwgd2UgbWF5IGJlIGFibGUgdG8gY2xhaW0gdGhlIEFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXQgKEFPVEMpIG9uIHlvdXIgYmVoYWxmLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgYW5kIG9wdGltaXplIHlvdXIgdGF4IHJldHVybnMgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgQU9UQywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+VHVpdGlvbiBTdGF0ZW1lbnRzPC9zdHJvbmc+IChGb3JtIDEwOTgtVCkgZm9yIGVhY2ggc3R1ZGVudCBmb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBwYWlkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5IHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZWNlaXB0cyBhbmQgUmVjb3Jkczwvc3Ryb25nPiBmb3IgcmVsYXRlZCBlZHVjYXRpb25hbCBleHBlbnNlcyBub3QgY292ZXJlZCBieSB0aGUgdHVpdGlvbiBzdGF0ZW1lbnQuIFRoaXMgaW5jbHVkZXMgYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cclxuICAgICAgPGxpPkNvbmZpcm1hdGlvbiB0aGF0IHRoZSBzdHVkZW50IHdhcyBlbnJvbGxlZCA8c3Ryb25nPmF0IGxlYXN0IGhhbGYtdGltZTwvc3Ryb25nPiBpbiBhIHByb2dyYW0gbGVhZGluZyB0byBhIGRlZ3JlZSwgY2VydGlmaWNhdGUsIG9yIG90aGVyIHJlY29nbml6ZWQgZWR1Y2F0aW9uYWwgY3JlZGVudGlhbC48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnQgY29uZmlybWluZyB0aGF0IHRoZSBleHBlbnNlcyB3ZXJlIGZvciB0aGUgPHN0cm9uZz5maXJzdCBmb3VyIHllYXJzPC9zdHJvbmc+IG9mIHBvc3Qtc2Vjb25kYXJ5IGVkdWNhdGlvbi48L2xpPlxyXG4gICAgICA8bGk+RXZpZGVuY2UgdG8gc2hvdyB0aGF0IHRoZSBzdHVkZW50IGhhZCBub3QgY2xhaW1lZCB0aGUgQU9UQyAob3IgdGhlIGZvcm1lciBIb3BlIGNyZWRpdCkgZm9yIG1vcmUgdGhhbiBmb3VyIHRheCB5ZWFycy48L2xpPlxyXG4gICAgICA8bGk+UHJvb2YgdGhhdCBuZWl0aGVyIHRoZSBzdHVkZW50IG5vciB0aGUgY2xhaW1hbnQgKGlmIG5vdCB0aGUgc3R1ZGVudCkgaXMgYSBub25yZXNpZGVudCBhbGllbiBmb3IgdGF4IHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgIDxsaT5BIHN0YXRlbWVudCBpbmRpY2F0aW5nIGlmIGFueSBmZWxvbnkgZHJ1ZyBjb252aWN0aW9ucyB3ZXJlIHJlY2VpdmVkIGJ5IHRoZSBzdHVkZW50IGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaXMgZXNzZW50aWFsIGFzIHN1Y2ggY29udmljdGlvbnMgZGlzcXVhbGlmeSB0aGUgc3R1ZGVudCBmcm9tIGNsYWltaW5nIHRoZSBBT1RDLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gT25jZSB3ZSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCB3ZSB3aWxsIHByb2NlZWQgd2l0aCB0aGUgbWF4aW1pemF0aW9uIGFuZCBhcHBsaWNhdGlvbiBvZiB0aGUgQW1lcmljYW4gT3Bwb3J0dW5pdHkgVGF4IENyZWRpdCB0byB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcywgd2UndmUgbm90ZWQgdGhhdCB5b3UsIHlvdXIgc3BvdXNlLCBvciB5b3VyIGRlcGVuZGVudHMgaGF2ZSBwYWlkIGZvciBoaWdoZXIgZWR1Y2F0aW9uIGxhc3QgeWVhci4gVGhpcyBtYWtlcyB5b3UgcG90ZW50aWFsbHkgZWxpZ2libGUgZm9yIHRoZSBMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0LCB3aGljaCBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggc2F2aW5ncy4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgeW91ciBlbGlnaWJpbGl0eSBhbmQgY2FsY3VsYXRlIHRoZSBjcmVkaXQsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+Rm9ybSAxMDk4LVQgZnJvbSBlYWNoIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGF0dGVuZGVkIGJ5IHlvdSwgeW91ciBzcG91c2UsIG9yIGRlcGVuZGVudHMuIFRoaXMgZm9ybSBzaG93cyB0aGUgYW1vdW50cyBwYWlkIGZvciB0dWl0aW9uIGFuZCByZWxhdGVkIGV4cGVuc2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHBheW1lbnRzIG1hZGUgZm9yIHR1aXRpb24sIGZlZXMsIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgeW91ciBjb3Vyc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHJvb20gYW5kIGJvYXJkLCBpbnN1cmFuY2UsIG1lZGljYWwgZXhwZW5zZXMsIGFuZCB0cmFuc3BvcnRhdGlvbiBhcmUgbm90IHF1YWxpZmllZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYW55IHNjaG9sYXJzaGlwcywgZ3JhbnRzLCBvciBvdGhlciB0YXgtZnJlZSBlZHVjYXRpb25hbCBhc3Npc3RhbmNlIHJlY2VpdmVkLiBUaGlzIGhlbHBzIHVzIGRldGVybWluZSB0aGUgbmV0IGFtb3VudCBvZiBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgYW55IHJlY29yZHMgb2YgZmVsb25pZXMgKGFzIGluZGl2aWR1YWxzIHdpdGggZmVsb255IGRydWcgY29udmljdGlvbnMgYXJlIG5vdCBlbGlnaWJsZSBmb3IgdGhpcyBjcmVkaXQpLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZXhwZW5zZXMgcGFpZCB3aXRoIGRpc3RyaWJ1dGVkIGVhcm5pbmdzIGZyb20gYSA1MjkgcGxhbiwgaWYgYW55LiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgYXMgaXQgbWF5IGFmZmVjdCB0aGUgY3JlZGl0IGNhbGN1bGF0aW9uLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgZm9yIHRoZSB0YXggeWVhciB3ZSBhcmUgcHJlcGFyaW5nIHlvdXIgcmV0dXJuIGZvci4gR2F0aGVyaW5nIGFuZCB2ZXJpZnlpbmcgdGhlc2UgZG9jdW1lbnRzIGVhcmx5IGluIHRoZSBwcm9jZXNzIHdpbGwgc3RyZWFtbGluZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGJlbmVmaXQgbGVnYWxseSBhdmFpbGFibGUgdG8geW91LjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBncmVhdGx5IGFpZCBpbiB0aGUgZWZmaWNpZW50IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFYXJuZWQgSW5jb21lIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IGVhcm5lZCBtb25leSBmcm9tIHdvcmsgYW5kIGhhdmUgYSByZWxhdGl2ZWx5IGxvdyB0byBtb2RlcmF0ZSBpbmNvbWUgbGFzdCB5ZWFyLCB5b3UgbWF5IGJlIGVsaWdpYmxlIGZvciB0aGUgRWFybmVkIEluY29tZSBUYXggQ3JlZGl0IChFSVRDKS4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgeW91ciBlbGlnaWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciBFSVRDIGNsYWltLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBXLTIgZm9ybXMgaWYgeW91IHdlcmUgZW1wbG95ZWQgYnkgc29tZW9uZSBlbHNlLCBvciBhIHN1bW1hcnkgb2YgaW5jb21lIGFuZCBleHBlbnNlcyBpZiB5b3Ugd2VyZSBzZWxmLWVtcGxveWVkIG9yIHJhbiBhIGJ1c2luZXNzIG9yIGZhcm0uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pOjwvc3Ryb25nPiBDb3BpZXMgb2YgU29jaWFsIFNlY3VyaXR5IGNhcmRzIGZvciB5b3UsIHlvdXIgc3BvdXNlIChpZiBmaWxpbmcgam9pbnRseSksIGFuZCBhbnkgZGVwZW5kZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jeTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IHlvdXIgY2hpbGQocmVuKSBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgVW5pdGVkIFN0YXRlcyBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLiBUaGlzIGNhbiBpbmNsdWRlIHNjaG9vbCByZWNvcmRzLCBtZWRpY2FsIHJlY29yZHMsIG9yIGEgc2lnbmVkIGxldHRlciBmcm9tIGEgbGFuZGxvcmQgb3IgYW5vdGhlciB0aGlyZCBwYXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW5jb21lIFN0YXRlbWVudDo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIHByb3ZpZGUgYSBzdGF0ZW1lbnQgb2YgYW55IGludmVzdG1lbnQgaW5jb21lIHlvdSByZWNlaXZlZCwgYXMgdGhpcyBjYW4gYWZmZWN0IEVJVEMgZWxpZ2liaWxpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GaWxpbmcgU3RhdHVzIFZlcmlmaWNhdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB5b3VyIGZpbGluZyBzdGF0dXMgdG8gZW5zdXJlIHByb3BlciBFSVRDIGNhbGN1bGF0aW9uLiBUaGlzIGNvdWxkIGJlIFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgSGVhZCBvZiBIb3VzZWhvbGQsIGV0Yy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByZXZpb3VzIFllYXIgVGF4IFJldHVybjo8L3N0cm9uZz4gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHllYXIgeW91IGFyZSBjbGFpbWluZyBFSVRDIG9yIGlmIHlvdSB3ZXJlIGVsaWdpYmxlIGZvciBFSVRDIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHlvdXIgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIHN1Ym1pdHRlZCBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIEVJVEMgY2xhaW0uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGljZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIGNvbnRyaWJ1dGluZyB0byBhIHJldGlyZW1lbnQgcGxhbiBpbiB0aGUgbGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0LFwiIHdlIHJlcXVpcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgY29udHJpYnV0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHJldGlyZW1lbnQgcGxhbnMgeW91J3ZlIGNvbnRyaWJ1dGVkIHRvIChlLmcuLCBJUkEsIDQwMShrKSwgZXRjLik6PC9saT5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxsaT5OYW1lIG9mIHRoZSBwbGFuKHMpPC9saT5cclxuICAgICAgICA8bGk+VHlwZSBvZiBwbGFuKHMpPC9saT5cclxuICAgICAgICA8bGk+Q29udHJpYnV0ZWQgYW1vdW50IHRvIGVhY2ggcGxhbjwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgKFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgZXRjLik8L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvZiB0aGUgY29udHJpYnV0aW9ucyAoZS5nLiwgYWNjb3VudCBzdGF0ZW1lbnRzLCBGb3JtIDU0OTgsIHRyYW5zYWN0aW9uIHN1bW1hcmllcyk8L2xpPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIG9mIHlvdXIgYWdlLCB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHk8L2xpPlxyXG4gICAgICA8bGk+QW55IG5vdGljZXMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBwbGFuIGFkbWluaXN0cmF0b3IgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnM8L2xpPlxyXG4gICAgICA8bGk+Rm9yIG1hcnJpZWQgZmlsaW5nIGpvaW50bHksIHNpbWlsYXIgZGV0YWlscyBmb3IgeW91ciBzcG91c2XigJlzIGNvbnRyaWJ1dGlvbnMsIGlmIGFwcGxpY2FibGU8L2xpPlxyXG4gICAgPC9vbD4gIFxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGluIGEgdGltZWx5IG1hbm5lciB0byBmYWNpbGl0YXRlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPiBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdXIgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgbGFzdCB5ZWFyLCB5b3Ugd29ya2VkIGZvciB0d28gb3IgbW9yZSBlbXBsb3llcnMgYW5kIGhhZCBhIHRvdGFsIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgd2l0aGhlbGQgZnJvbSB5b3VyIHBheWNoZWNrcyB0aGF0IGV4Y2VlZGVkIHRoZSBsaW1pdCBmb3IgdGhlIHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgcG90ZW50aWFsIEV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0IGFuZCBlbnN1cmUgcHJvcGVyIGFkanVzdG1lbnQgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Vy0yIEZvcm1zIGZyb20gQWxsIEVtcGxveWVyczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIFctMiBmb3JtcyBmcm9tIGFsbCB5b3VyIGVtcGxveWVycyBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLiBUaGlzIGlzIHZpdGFsIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBQYXkgU3R1YnM6PC9zdHJvbmc+IElmIHBvc3NpYmxlLCBpbmNsdWRlIHlvdXIgZmluYWwgcGF5IHN0dWJzIG9mIHRoZSB5ZWFyIGZyb20gZWFjaCBlbXBsb3llci4gVGhpcyBjYW4gaGVscCB2ZXJpZnkgdGhlIHRvdGFsIGVhcm5pbmdzIGFuZCB0aGUgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQsIGVzcGVjaWFsbHkgaWYgYW55IGRpc2NyZXBhbmNpZXMgYXJpc2Ugd2l0aCB0aGUgVy0yIGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgSW5mb3JtYXRpb246PC9zdHJvbmc+IEVuc3VyZSB5b3VyIGZ1bGwgbmFtZSwgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSwgYW5kIGN1cnJlbnQgYWRkcmVzcyBhcmUgY29ycmVjdCBhbmQgdXBkYXRlZCBmb3IgYWNjdXJhdGUgZmlsaW5nLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29uZmlybWF0aW9uIExldHRlciAoSWYgQXZhaWxhYmxlKTo8L3N0cm9uZz4gSWYgeW91J3ZlIHJlY2VpdmVkIGFueSBjb25maXJtYXRpb24gZnJvbSB0aGUgSVJTIG9yIHlvdXIgZW1wbG95ZXJzIHJlZ2FyZGluZyBleGNlc3MgU29jaWFsIFNlY3VyaXR5IGNvbnRyaWJ1dGlvbnMsIHBsZWFzZSBpbmNsdWRlIHRoZXNlIGNvbW11bmljYXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGNvbXBsZXRpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmluZyB0aGF0IHlvdSByZWNlaXZlIGFueSByZWZ1bmQgb2YgZXhjZXNzIFNvY2lhbCBTZWN1cml0eSB0YXhlcyBwYWlkLiBQbGVhc2Ugc2VuZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCB0byB1cy4gWW91ciBwcm9tcHQgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBmYWNpbGl0YXRlIGEgc21vb3RoIHRheCBmaWxpbmcgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJlbWl1bSBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IG9yIGEgZmFtaWx5IG1lbWJlciBlbnJvbGxlZCBpbiBhIGhlYWx0aCBpbnN1cmFuY2UgcGxhbiB0aHJvdWdoIHRoZSBNYXJrZXRwbGFjZSBsYXN0IHllYXIuIFRoaXMgbWF5IG1ha2UgeW91IGVsaWdpYmxlIGZvciB0aGUgUHJlbWl1bSBUYXggQ3JlZGl0LCB3aGljaCBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCBzYXZpbmdzIG9uIHlvdXIgdGF4IGJpbGwuPC9wPlxyXG4gICAgPHA+VG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBQcmVtaXVtIFRheCBDcmVkaXQgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29ycmVjdGx5IGZpbGVkLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk1LUEsIEhlYWx0aCBJbnN1cmFuY2UgTWFya2V0cGxhY2UgU3RhdGVtZW50PC9zdHJvbmc+OiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9mIHRoZSBoZWFsdGggY292ZXJhZ2UsIGluY2x1ZGluZyB0aGUgbW9udGhzIG9mIGNvdmVyYWdlIGFuZCB0aGUgYW1vdW50IG9mIHByZW1pdW0gcGFpZC4gSWYgeW91IG9yIGFueSBmYW1pbHkgbWVtYmVyIHdhcyBlbnJvbGxlZCBpbiBkaWZmZXJlbnQgcGxhbnMsIHBsZWFzZSBwcm92aWRlIGEgRm9ybSAxMDk1LUEgZm9yIGVhY2ggcGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjwvc3Ryb25nPjogUGxlYXNlIHByb3ZpZGUgYWxsIHNvdXJjZXMgb2YgaW5jb21lIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgaG91c2Vob2xkIGluY29tZS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBXLTIgZm9ybXMsIDEwOTkgZm9ybXMsIGFuZCBhbnkgb3RoZXIgZG9jdW1lbnRhdGlvbiBkZW1vbnN0cmF0aW5nIGluY29tZSByZWNlaXZlZCB0aHJvdWdob3V0IHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmFtaWx5IFNpemUgYW5kIEhvdXNlaG9sZCBJbmZvcm1hdGlvbjwvc3Ryb25nPjogQ29uZmlybSB0aGUgbnVtYmVyIG9mIGRlcGVuZGVudHMgYW5kIGFueSBjaGFuZ2VzIGluIHlvdXIgaG91c2Vob2xkIGxhc3QgeWVhciwgYXMgdGhpcyBjb3VsZCBhZmZlY3QgeW91ciBlbGlnaWJpbGl0eSBhbmQgdGhlIGFtb3VudCBvZiB0aGUgY3JlZGl0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWR2YW5jZWQgUHJlbWl1bSBUYXggQ3JlZGl0IChBUFRDKSBSZXBheW1lbnQgSW5mb3JtYXRpb248L3N0cm9uZz4sIGlmIGFwcGxpY2FibGU6IElmIHlvdSByZWNlaXZlZCBhbiBhZHZhbmNlIHBheW1lbnQgb2YgdGhlIHByZW1pdW0gdGF4IGNyZWRpdCwgd2UgbmVlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgcGF5bWVudHMgdG8gcmVjb25jaWxlIHRoZSBhbW91bnQgb24geW91ciByZXR1cm4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIHNlcnZpbmcgeW91IGFuZCBlbnN1cmluZyB5b3UgcmVjZWl2ZSBhbGwgdGhlIHRheCBiZW5lZml0cyB5b3UgYXJlIGVudGl0bGVkIHRvLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydHMgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGF0IHlvdXIgaW5jb21lIHRoaXMgeWVhciBpbmNsdWRlcyBzaWduaWZpY2FudCBhbW91bnRzIGZyb20gaW52ZXN0bWVudHMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgTmV0IEludmVzdG1lbnQgSW5jb21lIFRheCwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgZ2F0aGVyIGNvbXByZWhlbnNpdmUgZGV0YWlscyByZWdhcmRpbmcgeW91ciBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPkludGVyZXN0IEluY29tZSBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBEb2N1bWVudHMgc3VjaCBhcyAxMDk5LUlOVCBvciBzaW1pbGFyIGZvcm1zIHNob3dpbmcgaW50ZXJlc3QgZWFybmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EaXZpZGVuZCBJbmNvbWUgU3RhdGVtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHN1Y2ggYXMgMTA5OS1ESVYgb3Igc2ltaWxhciBmb3JtcyBkZXRhaWxpbmcgZGl2aWRlbmQgaW5jb21lIHJlY2VpdmVkLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5DYXBpdGFsIEdhaW5zIFJlY29yZHM6PC9zdHJvbmc+IFNhbGVzIHJlY2VpcHRzIG9yIGJyb2tlciBzdGF0ZW1lbnRzIHNob3dpbmcgcHJvY2VlZHMgZnJvbSB0aGUgc2FsZSBvZiBhc3NldHMsIGFsb25nIHdpdGggcHVyY2hhc2UgZG9jdW1lbnRhdGlvbiB0byBjYWxjdWxhdGUgZ2FpbnMgb3IgbG9zc2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZW50YWwgYW5kIFJveWFsdHkgSW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgaW5jb21lIGFuZCBhc3NvY2lhdGVkIGV4cGVuc2VzIGZyb20gcmVudGFsIHByb3BlcnRpZXMgb3Igcm95YWx0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ob24tUXVhbGlmaWVkIEFubnVpdGllcyBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBZZWFyLWVuZCBzdGF0ZW1lbnRzIGZvciBhbnkgbm9uLXF1YWxpZmllZCBhbm51aXR5IGNvbnRyYWN0cyBzaG93aW5nIGRpc3RyaWJ1dGlvbnMgcmVjZWl2ZWQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkZvcm0gODk2MDo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBhbnkgcHJpb3IgeWVhciBGb3JtIDg5NjAgeW91IGhhdmUgZmlsZWQgZm9yIE5ldCBJbnZlc3RtZW50IEluY29tZSBUYXgsIHdoaWNoIGNhbiBwcm92aWRlIGEgYmFzaXMgZm9yIGVzdGltYXRlcyBhbmQgcGxhbm5pbmcuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5FbnN1cmluZyB3ZSBoYXZlIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gd2lsbCBub3Qgb25seSBzdHJlYW1saW5lIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MgYnV0IGFsc28gaGVscCBpbiBsZXZlcmFnaW5nIHBvdGVudGlhbCB0YXgtc2F2aW5nIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIGFueSBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91ciBpbmNvbWUgbWF5IGV4Y2VlZCB0aGUgSVJTIHRocmVzaG9sZHMgZm9yIHRoZSBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBmb3IgeW91ciBmaWxpbmcgc3RhdHVzLiBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGFzc2VzcyBhbmQgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+Q29uZmlybWF0aW9uIG9mIHlvdXIgZmlsaW5nIHN0YXR1cyBmb3IgdGhlIHRheCB5ZWFyIChNYXJyaWVkIEZpbGluZyBKb2ludGx5LCBNYXJyaWVkIEZpbGluZyBTZXBhcmF0ZWx5LCBTaW5nbGUsIEhlYWQgb2YgSG91c2Vob2xkLCBRdWFsaWZ5aW5nIFN1cnZpdmluZyBTcG91c2UpLjwvbGk+XHJcbiAgICAgIDxsaT5EZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIGFsbCBzb3VyY2VzIG9mIGluY29tZSBmb3IgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5XLTIgRm9ybXMgZnJvbSBhbGwgZW1wbG95ZXJzLjwvbGk+XHJcbiAgICAgICAgICA8bGk+MTA5OSBGb3JtcyAoaWYgYXBwbGljYWJsZSksIGluY2x1ZGluZzpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIDxsaT4xMDk5LU1JU0MgZm9yIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLjwvbGk+XHJcbiAgICAgICAgICAgICAgPGxpPjEwOTktSU5UIGZvciBpbnRlcmVzdCBlYXJuaW5ncy48L2xpPlxyXG4gICAgICAgICAgICAgIDxsaT4xMDk5LURJViBmb3IgZGl2aWRlbmRzLjwvbGk+XHJcbiAgICAgICAgICAgICAgPGxpPkFueSBvdGhlciAxMDk5IGZvcm1zIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgYW55IG90aGVyIGluY29tZSAoZS5nLiwgZm9yZWlnbiBpbmNvbWUsIHJlbnRhbCBpbmNvbWUpLjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSBkZWR1Y3Rpb25zIG9yIGV4Y2x1c2lvbnMgdG8gaW5jb21lIHRoYXQgeW91IGludGVuZCB0byBjbGFpbSAoZS5nLiwgSVJBIGNvbnRyaWJ1dGlvbnMsIHN0dWRlbnQgbG9hbiBpbnRlcmVzdCkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5XZSBhbHNvIHJlbWluZCB5b3UgdGhhdCBpZiB5b3UgYW5kL29yIHlvdXIgc3BvdXNlIGFyZSBzZWxmLWVtcGxveWVkLCBhZGRpdGlvbmFsIGRldGFpbHMgcmVnYXJkaW5nIHlvdXIgYnVzaW5lc3MgaW5jb21lIGFuZCBleHBlbnNlcyB3aWxsIGJlIG5lZWRlZCB0byBkZXRlcm1pbmUgeW91ciBuZXQgZWFybmluZ3MgYW5kIHBvdGVudGlhbCBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBvYmxpZ2F0aW9ucy48L3A+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIGFuZCBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIGFueSBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggbGlhYmlsaXRpZXMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOYW5ueSBUYXhcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk5hbm55IFRheFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCBlbXBsb3lpbmcgaG91c2Vob2xkIGhlbHAgc3VjaCBhcyBhIG5hbm55LCBob3VzZWtlZXBlciwgb3IgZ2FyZGVuZXIuIFRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIHNvLWNhbGxlZCBcIk5hbm55IFRheFwiIHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+Q29tcGxldGUgbmFtZSwgYWRkcmVzcywgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb2YgdGhlIGVtcGxveWVlLjwvbGk+XHJcbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCBwYWlkIHRvIHRoZSBlbXBsb3llZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBhbW91bnRzIHdpdGhoZWxkIGZyb20gdGhlIGVtcGxveWVlJ3MgcGF5IGZvciB0YXhlcywgaW5jbHVkaW5nIEZlZGVyYWwgSW5jb21lIFRheCwgU29jaWFsIFNlY3VyaXR5LCBhbmQgTWVkaWNhcmUgVGF4ZXMuPC9saT5cclxuICAgICAgICA8bGk+Q29waWVzIG9mIGFueSBlbXBsb3ltZW50IGNvbnRyYWN0cyBvciBhZ3JlZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIGFueSBlbXBsb3llciBjb250cmlidXRpb25zIHRvIFNvY2lhbCBTZWN1cml0eSwgTWVkaWNhcmUsIGFuZCB3aXRoaGVsZCBpbmNvbWUgdGF4ZXMgKGlmIGFwcGxpY2FibGUpLjwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgZW1wbG95bWVudCBzdGF0dXMgKGUuZy4sIFNjaGVkdWxlIEggZm9ybSkuPC9saT5cclxuICAgICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IHRheCBkb2N1bWVudHMgb3IgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZW1wbG95bWVudC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGF2b2lkaW5nIHBlbmFsdGllcyBmb3Igbm9uLWNvbXBsaWFuY2UuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGFyZSBoZXJlIHRvIGhlbHAgeW91IG5hdmlnYXRlIHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEVhcm5lZCBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gRWFybmVkIEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBlYXJuZWQgaW5jb21lIGZyb20gZm9yZWlnbiBzb3VyY2VzIHRoaXMgcGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBhbmQgcG90ZW50aWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEZvcmVpZ24gRWFybmVkIEluY29tZSBFeGNsdXNpb24gb3IgY3JlZGl0LCB3ZSdsbCBuZWVkIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBmb3JlaWduIGVhcm5lZCBpbmNvbWUuIFRoaXMgaW5jbHVkZXMgYW55IHdhZ2VzLCBzYWxhcmllcywgb3Igb3RoZXIgY29tcGVuc2F0aW9uIHJlY2VpdmVkIGZyb20gc2VydmljZXMgcGVyZm9ybWVkIHdoaWxlIGxpdmluZyBhYnJvYWQuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgeW91ciBmb3JlaWduIGVhcm5lZCBpbmNvbWUuIFRoaXMgY291bGQgYmUgaW4gdGhlIGZvcm0gb2YgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMgcmVmbGVjdGluZyBkaXJlY3QgZGVwb3NpdHMsIG9yIGVxdWl2YWxlbnQgZG9jdW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIHRoZSBjb3VudHJ5IG9yIGNvdW50cmllcyBpbiB3aGljaCB5b3UgZWFybmVkIHRoaXMgaW5jb21lLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGVzIG9mIHlvdXIgcmVzaWRlbmN5IGluIGVhY2ggZm9yZWlnbiBjb3VudHJ5LjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSB0YXggcmVzaWRlbmN5IGNlcnRpZmljYXRlcyBvciBzdGF0ZW1lbnRzIGZyb20gZm9yZWlnbiB0YXggYXV0aG9yaXRpZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgZm9yZWlnbiB0YXggcGFpZCwgaW5jbHVkaW5nIHRheCByZXR1cm5zIGZpbGVkIGluIHRoZSBmb3JlaWduIGNvdW50cnksIGlmIGF2YWlsYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT5SZWNvcmRzIG9mIHlvdXIgVS5TLiBhbmQgZm9yZWlnbiBhZGRyZXNzZXMgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgdGF4IHRyZWF0aWVzIGJldHdlZW4gdGhlIFUuUy4gYW5kIHRoZSBjb3VudHJ5IG9yIGNvdW50cmllcyB5b3Ugd29ya2VkIGluLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgc2lnbmVkIEZvcm0gMjU1NSBvciAyNTU1LUVaLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IHByZXBhcmVkIHRoaXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGVzZSBkb2N1bWVudHMgYW5kIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGhhbmRsZSB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGhhdmUgdGhlc2UgbWF0ZXJpYWxzIHJlYWR5IGFuZCBzZW5kIHRoZW0gdG8gdXMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiBhbnkgb2YgdGhlIGl0ZW1zIHJlcXVlc3RlZCwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3Ugd2l0aCB5b3VyIHRheGVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSd2ZSBub3RlZCB0aGF0IHlvdSBoYXZlIGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIGluY3VycmluZyBlbGlnaWJsZSBleHBlbnNlcyBmb3IgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24gZHVlIHRvIGVhcm5pbmcgaW5jb21lIGluIGEgZm9yZWlnbiBjb3VudHJ5IGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gZXhjbHVzaW9uIHBvc3NpYmxlLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgY3VycmVudCBsZWFzZSBvciByZW50YWwgYWdyZWVtZW50LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VXRpbGl0eSBCaWxsczo8L3N0cm9uZz4gQ29waWVzIG9mIHV0aWxpdHkgYmlsbHMgZm9yIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbiAoZXhjbHVkaW5nIHRlbGVwaG9uZSBjaGFyZ2VzKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluc3VyYW5jZSBEb2N1bWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBwcm92aW5nIHBheW1lbnQgb2YgcmVhbCBlc3RhdGUgb3IgcmVudGFsIGluc3VyYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIEhvdXNpbmcgQ29zdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGhvdXNpbmcgY29zdHMgbm90IHByZXZpb3VzbHkgbWVudGlvbmVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgRm9yZWlnbiBJbmNvbWU6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdmVyaWZ5aW5nIHlvdXIgZm9yZWlnbiBlYXJuZWQgaW5jb21lIChlLmcuLCBwYXkgc3R1YnMsIGJhbmsgc3RhdGVtZW50cykuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Mb2NhdGlvbiBhbmQgRHVyYXRpb246PC9zdHJvbmc+IEEgYnJpZWYgc3RhdGVtZW50IGRldGFpbGluZyB0aGUgbG9jYXRpb24gb2YgeW91ciBmb3JlaWduIHJlc2lkZW5jZSBhbmQgdGhlIGR1cmF0aW9uIG9mIHlvdXIgc3RheSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYXJlIGNsZWFybHkgbGVnaWJsZSBhbmQgaW4gYSBmb3JtYXQgdGhhdCBjYW4gYmUgZWFzaWx5IHNoYXJlZCBlbGVjdHJvbmljYWxseS4gVGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgdGhlc2UgZG9jdW1lbnRzIGFyZSBlc3NlbnRpYWwgZm9yIGEgY29ycmVjdCBhbmQgb3B0aW1pemVkIGZpbGluZyBvZiB5b3VyIHRheCByZXR1cm4sIGVzcGVjaWFsbHkgY29uY2VybmluZyB0aGUgRm9yZWlnbiBIb3VzaW5nIEV4Y2x1c2lvbi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZSByZXF1aXJlZCBkb2N1bWVudHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBhdCB5b3VyIGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIHRoZSBxdWVzdGlvbiBjb25jZXJuaW5nIHBvdGVudGlhbCBlbGlnaWJpbGl0eSBmb3IgdGhlIDxzdHJvbmc+Rm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvbjwvc3Ryb25nPi4gVGhpcyBkZWR1Y3Rpb24gaXMgZGVzaWduZWQgdG8gaGVscCBtaXRpZ2F0ZSB0aGUgaGlnaGVyIGNvc3Qgb2YgbGl2aW5nIGFicm9hZCBieSBhbGxvd2luZyBjZXJ0YWluIGhvdXNpbmcgZXhwZW5zZXMgdG8gYmUgZGVkdWN0ZWQgZm9yIHRheCBwdXJwb3Nlcy48L3A+XHJcbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggZmlsaW5nIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYWxsb3dhYmxlIGRlZHVjdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHJlbGF0ZWQgdG8geW91ciBob3VzaW5nIGV4cGVuc2VzIGluY3VycmVkIHdoaWxlIHdvcmtpbmcgYWJyb2FkOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB5b3VyIHJlbnRhbCBhZ3JlZW1lbnQgb3IgbGVhc2UgdGhhdCBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiByZW50IHBhaWQgYW5kIHRoZSBwZXJpb2Qgb2Ygb2NjdXBhbmN5LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5VdGlsaXR5IEJpbGxzOjwvc3Ryb25nPiBDb3BpZXMgb2YgdXRpbGl0eSBiaWxscyBmb3IgdGhlIHBlcmlvZCB5b3UgYXJlIGNsYWltaW5nIHRoZSBkZWR1Y3Rpb24uIFRoaXMgaW5jbHVkZXMgZWxlY3RyaWNpdHksIHdhdGVyLCBhbmQgZ2FzLCBidXQgZXhjbHVkZXMgdGVsZXBob25lIGNoYXJnZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlJlYWwgRXN0YXRlIEluc3VyYW5jZTo8L3N0cm9uZz4gRG9jdW1lbnQgcHJvb2Ygb2YgYW55IHJlYWwgZXN0YXRlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkIGZvciB5b3VyIGZvcmVpZ24gaG91c2luZy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+T3RoZXIgRWxpZ2libGUgRXhwZW5zZXM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBhbnkgYWRkaXRpb25hbCBlbGlnaWJsZSBsaXZpbmcgZXhwZW5zZXMgbm90IGNvdmVyZWQgYWJvdmUuIFBsZWFzZSBub3RlLCB0byBxdWFsaWZ5LCB0aGVzZSBleHBlbnNlcyBtdXN0IGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciBmb3JlaWduIGhvdXNpbmcgYW5kIG5vdCBjb3ZlcmVkIHVuZGVyIHRoZSBiYXNlIGFtb3VudCBleGVtcHRpb24uPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gRWFybmVkIEluY29tZTo8L3N0cm9uZz4gVmVyaWZpY2F0aW9uIG9mIHlvdXIgZWFybmVkIGluY29tZSB3aGlsZSB3b3JraW5nIGFicm9hZCwgYXMgdGhlIGRlZHVjdGlvbiBpcyB0aWVkIHRvIGNlcnRhaW4gaW5jb21lIGxpbWl0YXRpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGlzIG1heSBpbnZvbHZlIGdhdGhlcmluZyBzZXZlcmFsIGRvY3VtZW50cywgYnV0IGVuc3VyaW5nIHdlIGhhdmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIG1heGltaXppbmcgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucyBhbmQgcmVtYWluaW5nIGNvbXBsaWFudCB3aXRoIHRheCByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgdG8gZGlzY3VzcyBhbnkgY2hhbGxlbmdlcyB5b3UgbWF5IGZhY2UgaW4gb2J0YWluaW5nIHRoZW0uIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmVpZ24gVGF4IENyZWRpdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBUYXggQ3JlZGl0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNsYWltaW5nIHlvdXIgRm9yZWlnbiBUYXggQ3JlZGl0LCBhcyBpbmRpY2F0ZWQgYnkgeW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IHBhaWQgdGF4ZXMgdG8gYSBmb3JlaWduIGNvdW50cnkgb24gZWFybmVkIGluY29tZSB0aGVyZS4gVG8gcHJvcGVybHkgY2FsY3VsYXRlIGFuZCBhcHBseSB0aGlzIGNyZWRpdCB0byB5b3VyIFUuUy4gdGF4IHJldHVybiwgd2Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RWFybmVkIEluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbnkgZG9jdW1lbnRzIHRoYXQgdmVyaWZ5IHRoZSBhbW91bnQgb2YgaW5jb21lIGVhcm5lZCBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LiBUaGlzIG1heSBpbmNsdWRlLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHBheSBzdHVicywgVy0yIGZvcm1zIGZyb20gZm9yZWlnbiBlbXBsb3llcnMsIG9yIGFueSBvZmZpY2lhbCBpbmNvbWUgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFRheCBQYWlkOjwvc3Ryb25nPiBUbyBjbGFpbSB0aGUgRm9yZWlnbiBUYXggQ3JlZGl0LCBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGFtb3VudCBvZiB0YXggcGFpZCB0byB0aGUgZm9yZWlnbiBnb3Zlcm5tZW50IGlzIHJlcXVpcmVkLiBBY2NlcHRhYmxlIGZvcm1zIG9mIGV2aWRlbmNlIGluY2x1ZGUgZm9yZWlnbiB0YXggcmV0dXJuKHMpLCB3aXRoaG9sZGluZyBzdGF0ZW1lbnRzLCBvciBhbnkgb2ZmaWNpYWwgdGF4IHJlY2VpcHRzIHByb3ZpZGVkIGJ5IHRoZSBmb3JlaWduIHRheCBhdXRob3JpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXI6PC9zdHJvbmc+IFlvdXIgU29jaWFsIFNlY3VyaXR5IE51bWJlciBvciBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIsIGZvciBhY2N1cmF0ZSBwcm9jZXNzaW5nIG9mIHRoZSB0YXggY3JlZGl0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgRm9yZWlnbiBUYXg6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlIG9mIHRheCBwYWlkIHRvIHRoZSBmb3JlaWduIGNvdW50cnkgKGluY29tZSB0YXgsIHNhbGVzIHRheCwgZXRjLiksIGluY2x1ZGluZyB3aGV0aGVyIGl0IHdhcyBhIGZlZGVyYWwsIHN0YXRlL3Byb3ZpbmNpYWwsIG9yIGxvY2FsIHRheC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jeSAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdXIgY2xhaW0gZGVwZW5kcyBvbiByZXNpZGVuY3kgc3RhdHVzIGluIHRoZSBmb3JlaWduIGNvdW50cnksIHBsZWFzZSBwcm92aWRlIHByb29mIG9mIHJlc2lkZW5jeSBmb3IgdGhlIHJlbGV2YW50IHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Rm9yZWlnbiBBZGRyZXNzIChJZiBBcHBsaWNhYmxlKTo8L3N0cm9uZz4gSWYgeW91IG1haW50YWluZWQgYSByZXNpZGVuY2Ugb3V0c2lkZSBvZiB0aGUgVW5pdGVkIFN0YXRlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLCBwbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybnMgYXJlIGFzIGJlbmVmaWNpYWwgdG8geW91ciBzaXR1YXRpb24gYXMgYWxsb3dlZCBieSBsYXcgYW5kIGZvciBwcmV2ZW50aW5nIGFueSB1bm5lY2Vzc2FyeSBkZWxheXMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIHRvIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBlbWFpbCBpdCB0byB1cyBhdCB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVHJhZGl0aW9uYWwgSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVHJhZGl0aW9uYWwgSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGhhdmUgbm90ZWQgeW91ciBpbmRpY2F0aW9uIG9mIG1ha2luZyBjb250cmlidXRpb25zIHRvIGEgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgbGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBiZW5lZmljaWFsIHRheCBmaWxpbmcsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGFib3V0IHlvdXIgVHJhZGl0aW9uYWwgSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIGFueSBkaXN0cmlidXRpb25zIHlvdSBtYXkgaGF2ZSB0YWtlbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+RGF0ZXMgb2YgY29udHJpYnV0aW9ucyB0byBhY2N1cmF0ZWx5IHJlcG9ydCB3aXRoaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gc3BlY2lmeWluZyB0aGUgY29udHJpYnV0aW9ucyBtYWRlLjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgZGlzdHJpYnV0aW9ucyB0YWtlbiBmcm9tIHlvdXIgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+QW1vdW50IG9mIGVhY2ggZGlzdHJpYnV0aW9uLjwvbGk+XHJcbiAgICAgICAgICA8bGk+RGF0ZXMgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cclxuICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gZm9yIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+WW91ciB5ZWFyLWVuZCBJUkEgc3RhdGVtZW50IGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgPGxpPkFueSBub3RpY2VzIHJlY2VpdmVkIHJlZ2FyZGluZyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGFjY3VyYXRlbHkgZGV0ZXJtaW5pbmcgeW91ciB0YXggbGlhYmlsaXRpZXMgb3IgYmVuZWZpdHMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgSVJBIGNvbnRyaWJ1dGlvbnMsIGFuZCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRoZSBJUlMgcnVsZXMgYW5kIHJlZ3VsYXRpb25zLiA8L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBmaWxpbmcuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPHA+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUm90aCBJUkEgQ29udHJpYnV0aW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHlvdXIgY29udHJpYnV0aW9ucyB0byBhIFJvdGggSVJBIGR1cmluZyB0aGUgbGFzdCB0YXggeWVhciBhcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgY2FwdHVyZSBhbGwgcmVsZXZhbnQgdGF4IGluZm9ybWF0aW9uIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNzIGFib3V0IHlvdXIgUm90aCBJUkEgY29udHJpYnV0aW9ucyBhbmQgYW55IGRpc3RyaWJ1dGlvbnM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBjb250cmlidXRlZCB0byB0aGUgUm90aCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+VGhlIGRhdGVzIG9uIHdoaWNoIHRoZXNlIGNvbnRyaWJ1dGlvbnMgd2VyZSBtYWRlLjwvbGk+XHJcbiAgICAgIDxsaT5PZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gdGhhdCBkZXRhaWwgdGhlc2UgY29udHJpYnV0aW9ucy48L2xpPlxyXG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IGRpc3RyaWJ1dGlvbnMsIHNob3VsZCB0aGV5IGFwcGx5LCBpbmNsdWRpbmc6XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24gdGFrZW4gZnJvbSB0aGUgUm90aCBJUkEuPC9saT5cclxuICAgICAgICAgIDxsaT5UaGUgZGF0ZXMgb2YgdGhlc2UgZGlzdHJpYnV0aW9ucy48L2xpPlxyXG4gICAgICAgICAgPGxpPkRpc3RyaWJ1dGlvbiBzdGF0ZW1lbnRzIG9yIHJlbGV2YW50IGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4uPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+WW91ciB5ZWFyLWVuZCBhY2NvdW50IHN0YXRlbWVudCBmb3IgdGhlIFJvdGggSVJBIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgPGxpPkFueSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24gb3Igbm90aWNlcyByZWdhcmRpbmcgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIG9yIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyB0YXggcmVwb3J0aW5nIGZvcm1zIGxpa2UgRm9ybSA1NDk4IG9yIEZvcm0gMTA5OS1SLCBpZiByZWNlaXZlZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMgb2YgeW91ciB0YXggc2l0dWF0aW9uLCBlbnN1cmluZyB0aGUgY29ycmVjdCB0cmVhdG1lbnQgb2YgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucywgYW5kIGNvbXBseWluZyB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVyaWVzIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmVpZ24gQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgbWFraW5nIHByb2dyZXNzIG9uIHlvdXIgdGF4IHJldHVybiwgYW5kIGJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBvd25lcnNoaXAgb3IgZmluYW5jaWFsIGludGVyZXN0IGluIGZvcmVpZ24gYXNzZXRzLCBhZGRpdGlvbmFsIGRldGFpbHMgYXJlIG5lY2Vzc2FyeS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGhlIEZvcmVpZ24gQWNjb3VudCBUYXggQ29tcGxpYW5jZSBBY3QgKEZBVENBKSBhbmQgUmVwb3J0IG9mIEZvcmVpZ24gQmFuayBhbmQgRmluYW5jaWFsIEFjY291bnRzIChGQkFSKSByZXF1aXJlbWVudHMuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIHN0YXRlbWVudHMgZnJvbSBmb3JlaWduIGJhbmtzLCBtdXR1YWwgZnVuZHMsIG9yIHNlY3VyaXRpZXMgYWNjb3VudHMuIFRoaXMgaW5jbHVkZXMgYW55dGhpbmcgd2l0aCBhbiBhZ2dyZWdhdGUgdmFsdWUgb3ZlciAkMTAsMDAwIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBOdW1iZXJzOjwvc3Ryb25nPiBUaGUgYWNjb3VudCBudW1iZXJzIGZvciBhbGwgYXBwbGljYWJsZSBhY2NvdW50cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkluc3RpdHV0aW9uIE5hbWVzOjwvc3Ryb25nPiBUaGUgbmFtZXMgYW5kIGFkZHJlc3NlcyBvZiB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9ucyB3aGVyZSB0aGVzZSBhY2NvdW50cyBhcmUgaGVsZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1heGltdW0gVmFsdWVzOjwvc3Ryb25nPiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBlYWNoIGFjY291bnQgZHVyaW5nIHRoZSB0YXggeWVhciwgY29udmVydGVkIHRvIFVTRCB1c2luZyB0aGUgZW5kLW9mLXllYXIgZXhjaGFuZ2UgcmF0ZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk93bmVyc2hpcCBEZXRhaWxzOjwvc3Ryb25nPiBDbGFyaWZpY2F0aW9uIG9uIHRoZSB0eXBlIG9mIG93bmVyc2hpcCAoaW5kaXZpZHVhbCwgam9pbnQsIGV0Yy4pIGFuZCB0aGUgcGVyY2VudGFnZSBvZiBvd25lcnNoaXAgaWYgbm90IHNvbGVseSBvd25lZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRhY3QgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIG1hbmFnZWQgYnkgYSBmaW5hbmNpYWwgYWR2aXNvciBvciBpbnN0aXR1dGlvbiwgcHJvdmlkZSB0aGVpciBjb250YWN0IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEdlbmVyYXRlZDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gYW55IGluY29tZSBnZW5lcmF0ZWQgZnJvbSB0aGVzZSBhc3NldHMsIHN1Y2ggYXMgaW50ZXJlc3QsIGRpdmlkZW5kcywgb3IgY2FwaXRhbCBnYWlucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgaW1wZXJhdGl2ZSB0byBlbnN1cmUgZnVsbCBjb21wbGlhbmNlIGFuZCBtaXRpZ2F0ZSBhbnkgcmlza3Mgb2YgcGVuYWx0aWVzLiBLaW5kbHkgc2VuZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gYWxsb3cgYW1wbGUgdGltZSBmb3IgcHJvcGVyIGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcywgd2UndmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBnaWZ0cyBvciBiZXF1ZXN0cyBmcm9tIGZvcmVpZ24gZW50aXRpZXMgdGhhdCBleGNlZWQgdGhlICQxMDAsMDAwIHRocmVzaG9sZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db21wbGV0ZSBsaXN0IG9mIGZvcmVpZ24gZ2lmdHMgb3IgYmVxdWVzdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGRldGFpbHMgZm9yIGVhY2ggZ2lmdCBvciBiZXF1ZXN0LCBpbmNsdWRpbmcgdGhlIGRhdGUgcmVjZWl2ZWQgYW5kIHRoZSBleGFjdCBhbW91bnQgaW4gVVNEIChVLlMuIERvbGxhcnMpLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRvbm9yIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBnaWZ0IHJlY2VpdmVkLCBwcm92aWRlIHRoZSBkb25vcidzIGZ1bGwgbmFtZSwgYWRkcmVzcywgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+U291cmNlIG9mIEdpZnQ6PC9zdHJvbmc+IERldGFpbCB0aGUgc291cmNlIG9mIGVhY2ggZ2lmdCwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgb3JpZ2luYXRlZCBmcm9tIGFuIGluZGl2aWR1YWwsIGVzdGF0ZSwgZm9yZWlnbiBjb3Jwb3JhdGlvbiwgb3IgcGFydG5lcnNoaXAuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Rm9yZWlnbiBDb3VudHJ5IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBjb3VudHJ5IGZyb20gd2hpY2ggZWFjaCBnaWZ0IG9yIGJlcXVlc3Qgd2FzIHJlY2VpdmVkLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IEF0dGFjaCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgZm9yZWlnbiBnaWZ0IGRlY2xhcmF0aW9uIGZvcm1zLCBvciBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byB0aGUgcmVjZWlwdCBvZiB0aGVzZSBnaWZ0cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCB0byBmdWxmaWxsIG91ciBvYmxpZ2F0aW9ucyBhbmQgZW5zdXJlIHRoZSBjb3JyZWN0bmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLiBGYWlsdXJlIHRvIHJlcG9ydCBmb3JlaWduIGdpZnRzIG9yIGJlcXVlc3RzIGFjY3VyYXRlbHkgY2FuIHJlc3VsdCBpbiBwZW5hbHRpZXMuIFdlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRlcHJlY2lhYmxlIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgd2UgYmVnaW4gcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiwgd2UgbmVlZCB5b3VyIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgZGVwcmVjaWFibGUgYXNzZXRzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBkZXByZWNpYXRpb24gZXhwZW5zZSBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucy48L3A+XHJcblxyXG4gICAgPGgyPkFjdGlvbiBJdGVtOjwvaDI+XHJcbiAgICA8cD5QbGVhc2UgYWNjZXNzIHlvdXIgPHN0cm9uZz5zZWN1cmUgY2xpZW50IHVwbG9hZCBwb3J0YWw8L3N0cm9uZz4gYW5kIG5hdmlnYXRlIHRvIHRoZSBmb2xsb3dpbmcgcGF0aDogPGNvZGU+dGF4ZXMvW0NVUlJFTlQgVEFYIFlFQVJdL0RlcHJlY2lhdGlvbi9Bc3NldHMueGxzeDwvY29kZT4uIFlvdSB3aWxsIGZpbmQgYSBzcHJlYWRzaGVldCB0aXRsZWQgXCI8c3Ryb25nPkRlcHJlY2lhYmxlIEFzc2V0czwvc3Ryb25nPi5cIiBXZSBraW5kbHkgcmVxdWVzdCB0aGF0IHlvdSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVwcmVjaWFibGUgYXNzZXQgaW4geW91ciBidXNpbmVzczo8L3A+XHJcbiAgICA8dWw+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb246PC9zdHJvbmc+IFByb3ZpZGUgYSBicmllZiBkZXNjcmlwdGlvbiB0aGF0IGNsZWFybHkgaWRlbnRpZmllcyB0aGUgYXNzZXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIEFjcXVpcmVkOjwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkYXRlIHlvdSBwdXJjaGFzZWQgb3IgYWNxdWlyZWQgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCAvIEJhc2lzOjwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgb3JpZ2luYWwgY29zdCBvZiB0aGUgYXNzZXQgb3IgdGhlIGFkanVzdGVkIGJhc2lzIGlmIGRlcHJlY2lhdGlvbiBoYXMgYmVlbiBjbGFpbWVkIGluIHByZXZpb3VzIHllYXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QnVzaW5lc3MgJSBVc2U6PC9zdHJvbmc+IEVzdGltYXRlIHRoZSBwZXJjZW50YWdlIG9mIHRpbWUgdGhlIGFzc2V0IGlzIHVzZWQgZm9yIGJ1c2luZXNzIHB1cnBvc2VzIHZlcnN1cyBwZXJzb25hbCB1c2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Vc2VkIFByb3BlcnR5Ojwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBhc3NldCB3YXMgcHVyY2hhc2VkIG5ldyBvciB1c2VkLjwvbGk+XHJcbiAgICA8L3VsPlxyXG5cclxuICAgIDxoMz5JbXBvcnRhbnQgTm90ZSBvbiBTYWZlLUhhcmJvciBFeHBlbnNpbmc6PC9oMz5cclxuICAgIDxwPlBsZWFzZSBiZSBhd2FyZSB0aGF0IHVuZGVyIHRoZSBzYWZlLWhhcmJvciA8ZW0+ZGUgbWluaW1pczwvZW0+IGV4cGVuc2luZyBydWxlLCB5b3UgY2FuIGltbWVkaWF0ZWx5IGV4cGVuc2UgdGhlIGNvc3Qgb2YgYW55IGluZGl2aWR1YWwgYXNzZXQgdGhhdCBjb3N0cyBsZXNzIHRoYW4gJDIsNTAwLCBwcm92aWRlZCB5b3UgZG8gbm90IGhhdmUgYW4gQXBwbGljYWJsZSBGaW5hbmNpYWwgU3RhdGVtZW50IChBRlMpLiBJZiBhbiBhc3NldCBtZWV0cyB0aGlzIGNyaXRlcmlvbiwgeW91IGRvIG5vdCBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHNwcmVhZHNoZWV0LjwvcD5cclxuXHJcbiAgICA8cD5XZSBlbmNvdXJhZ2UgeW91IHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUgd2hlbiBsaXN0aW5nIHlvdXIgYXNzZXRzLiBJZiB5b3UgYXJlIHVuc3VyZSB3aGV0aGVyIGFuIGl0ZW0gc2hvdWxkIGJlIGluY2x1ZGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZGV0YWlscywgYW5kIHdlIHdpbGwgZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSB0cmVhdG1lbnQuPC9wPlxyXG5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gPHN0cm9uZz5jb250YWN0IHVzPC9zdHJvbmc+LiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIHdvcmtpbmcgd2l0aCB5b3UgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFzc2l2ZSBCdXNpbmVzcyBBY3Rpdml0aWVzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQYXNzaXZlIEJ1c2luZXNzIEFjdGl2aXRpZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIG9yZGVyIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzc2l2ZSBhY3Rpdml0aWVzIHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi4gUGFzc2l2ZSBhY3Rpdml0aWVzIGdlbmVyYWxseSBpbnZvbHZlIGJ1c2luZXNzIG9yIHRyYWRlIGFjdGl2aXRpZXMgaW4gd2hpY2ggeW91IGRvIG5vdCBtYXRlcmlhbGx5IHBhcnRpY2lwYXRlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGFjdGl2aXRpZXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIHRheCByZXBvcnRpbmcgYW5kIHBvdGVudGlhbCB0YXggYmVuZWZpdHMuPC9wPlxyXG5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaWYgeW91IGJlbGlldmUgd2UgZG8gbm90IGFscmVhZHkgaGF2ZSB0aGUgaW5mb3JtYXRpb24gaW4geW91ciBidXNpbmVzcyBmaW5hbmNpYWxzOjwvcD5cclxuICAgIFxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5OYW1lcyBhbmQgRGVzY3JpcHRpb25zOjwvc3Ryb25nPiBBIGxpc3QgYW5kIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggcGFzc2l2ZSBhY3Rpdml0eSB5b3VyIGJ1c2luZXNzIGlzIGVuZ2FnZWQgaW4uPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN0YXRlbWVudHM6PC9zdHJvbmc+SWYgbm90IGFscmVhZHkgaW4geW91ciBidXNpbmVzcyBmaW5hbmNpYWxzLCBQcm9maXQgYW5kIGxvc3Mgc3RhdGVtZW50cyBmb3IgZWFjaCBwYXNzaXZlIGFjdGl2aXR5LCBkZXRhaWxpbmcgaW5jb21lIGFuZCBleHBlbnNlcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Pd25lcnNoaXAgU3RydWN0dXJlOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG91dGxpbmluZyB5b3VyIG93bmVyc2hpcCBpbnRlcmVzdCBpbiBlYWNoIGFjdGl2aXR5LCBpbmNsdWRpbmcgYW55IGpvaW50IHZlbnR1cmVzIG9yIHBhcnRuZXJzaGlwcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZW50YWwgUHJvcGVydGllcyAoaWYgYXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIGFueSBwYXNzaXZlIGFjdGl2aXRpZXMgaW5jbHVkZSByZW50YWwgcHJvcGVydGllcywgcGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3NlcywgbGVhc2UgYWdyZWVtZW50cywgYW5kIGEgc2NoZWR1bGUgb2YgcmVudHMgY29sbGVjdGVkIGFuZCBleHBlbnNlcyBpbmN1cnJlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Mb2cgb2YgUGVyc29uYWwgSW52b2x2ZW1lbnQ6PC9zdHJvbmc+IEZvciBlYWNoIGFjdGl2aXR5LCBhIGxvZyBvciByZWNvcmQgb2YgeW91ciBwZXJzb25hbCBpbnZvbHZlbWVudCBvciBwYXJ0aWNpcGF0aW9uIG92ZXIgdGhlIHRheCB5ZWFyLCB0byBzdWJzdGFudGlhdGUgdGhlIGV4dGVudCBvZiB5b3VyIG1hdGVyaWFsIHBhcnRpY2lwYXRpb24uPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJpb3IgWWVhciBMb3NzZXM6PC9zdHJvbmc+IEluZm9ybWF0aW9uIG9uIGFueSBsb3NzZXMgZnJvbSB0aGVzZSBhY3Rpdml0aWVzIGNhcnJpZWQgb3ZlciBmcm9tIHByZXZpb3VzIHRheCB5ZWFycy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIFxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGZvciBhc3Nlc3NpbmcgeW91ciBwYXNzaXZlIGFjdGl2aXR5IGxvc3NlcyBhbmQgY29ycmVjdGx5IGFwcGx5aW5nIHRoZW0gYWdhaW5zdCB5b3VyIHBhc3NpdmUgYWN0aXZpdHkgaW5jb21lLCBpbiBsaW5lIHdpdGggdGhlIElSUyBwYXNzaXZlIGFjdGl2aXR5IGxvc3MgcnVsZXMuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkdlbmVyYWwgQnVzaW5lc3MgQ3JlZGl0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGV4cGxvcmluZyBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGJlbmVmaXRzIHRocm91Z2ggdmFyaW91cyBnZW5lcmFsIGJ1c2luZXNzIGNyZWRpdHMuIFRoZXNlIGNyZWRpdHMgYXJlIGRlc2lnbmVkIHRvIGVuY291cmFnZSBjZXJ0YWluIGJ1c2luZXNzIGFjdGl2aXRpZXMgdGhhdCBtZWV0IHRoZSBnb2FscyBhbmQgcG9saWNpZXMgZXN0YWJsaXNoZWQgYnkgdGhlIGdvdmVybm1lbnQsIHJhbmdpbmcgZnJvbSBpbnZlc3RtZW50IGluIHByb3BlcnR5IHRvIGZvc3RlcmluZyBzb2NpYWwgcmVzcG9uc2liaWxpdGllcyBsaWtlIGVtcGxveW1lbnQgb3Bwb3J0dW5pdGllcyBmb3IgdmV0ZXJhbnMuIFVuZGVyc3RhbmRpbmcgd2hldGhlciB5b3VyIGJ1c2luZXNzIGlzIGVsaWdpYmxlIGZvciB0aGVzZSBjYW4gc2lnbmlmaWNhbnRseSBpbXBhY3QgeW91ciBmaW5hbmNpYWxzIGZhdm9yYWJseS48L3A+XHJcblxyXG4gICAgPHA+QmVsb3cgaXMgYSBicmllZiBleHBsYW5hdGlvbiBvZiBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiBHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHMgYW5kIG90aGVycyB0aGF0IG1pZ2h0IGFwcGx5IHRvIHlvdXIgc2l0dWF0aW9uOjwvcD5cclxuICAgIFxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IENyZWRpdCAoRm9ybSAzNDY4KTo8L3N0cm9uZz4gRm9yIGludmVzdGluZyBpbiBjZXJ0YWluIHByb3BlcnR5IGxpa2UgYnVpbGRpbmdzLCBlcXVpcG1lbnQsIG9yIG90aGVyIHRhbmdpYmxlIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPldvcmsgT3Bwb3J0dW5pdHkgVGF4IENyZWRpdCAoRm9ybSA1ODg0KTo8L3N0cm9uZz4gRm9yIGhpcmluZyBpbmRpdmlkdWFscyBmcm9tIGNlcnRhaW4gdGFyZ2V0IGdyb3VwcyB3aG8gaGF2ZSBjb25zaXN0ZW50bHkgZmFjZWQgc2lnbmlmaWNhbnQgYmFycmllcnMgdG8gZW1wbG95bWVudC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EaXNhYmxlZCBBY2Nlc3MgQ3JlZGl0Ojwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIGluY3VycmVkIGV4cGVuc2VzIGZvciBtYWtpbmcgaXQgbW9yZSBhY2Nlc3NpYmxlIHRvIGluZGl2aWR1YWxzIHdpdGggZGlzYWJpbGl0aWVzLCBjb21wbHlpbmcgd2l0aCB0aGUgQW1lcmljYW5zIHdpdGggRGlzYWJpbGl0aWVzIEFjdCAoQURBKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIEVtcGxveWVyIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUgVGF4ZXMgb24gRW1wbG95ZWUgVGlwcyAoRm9ybSA4ODQ2KTo8L3N0cm9uZz4gSWYgeW91IGhhdmUgZW1wbG95ZWVzIHdobyByZWNlaXZlIHRpcHMsIHRoaXMgY3JlZGl0IHJlbGF0ZXMgdG8gdGhlIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUgdGF4ZXMgeW91IHBheSBvbiB0aG9zZSB0aXBzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkVtcGxveWVyIENyZWRpdCBmb3IgUGFpZCBGYW1pbHkgYW5kIE1lZGljYWwgTGVhdmUgKEZNTEEgTGVhdmUpIChGb3JtIDg5OTQpOjwvc3Ryb25nPiBGb3IgYnVzaW5lc3NlcyBwcm92aWRpbmcgcGFpZCBmYW1pbHkgYW5kIG1lZGljYWwgbGVhdmUgdG8gdGhlaXIgZW1wbG95ZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgSGVhbHRoIEluc3VyYW5jZSBQcmVtaXVtcyAoRm9ybSA4OTQxKTo8L3N0cm9uZz4gSWYgeW91IHByb3ZpZGUgaGVhbHRoIGluc3VyYW5jZSB0byB5b3VyIGVtcGxveWVlcywgeW91IG1pZ2h0IGJlIGVsaWdpYmxlIGZvciB0aGlzIGNyZWRpdC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQgQ3JlZGl0IChGb3JtIDY3NjUpOjwvc3Ryb25nPiBGb3IgYnVzaW5lc3NlcyBlbmdhZ2luZyBpbiBxdWFsaWZpZWQgcmVzZWFyY2ggYWN0aXZpdGllcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5DcmVkaXQgZm9yIEVtcGxveWVyLVByb3ZpZGVkIENoaWxkIENhcmUgRmFjaWxpdGllcyBhbmQgU2VydmljZXM6PC9zdHJvbmc+IElmIHlvdXIgYnVzaW5lc3MgcHJvdmlkZXMgY2hpbGQgY2FyZSBmYWNpbGl0aWVzIG9yIHNlcnZpY2VzIHRvIHlvdXIgZW1wbG95ZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgUGVuc2lvbiBQbGFuIFN0YXJ0dXAgQ29zdHMgYW5kIEF1dG8tRW5yb2xsbWVudCAoRm9ybSA4ODgxKTo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBoYXMgc2V0IHVwIG9yIHBsYW5zIHRvIHNldCB1cCBhIHBlbnNpb24gcGxhbiBmb3IgeW91ciBlbXBsb3llZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+T3RoZXIgY3JlZGl0czo8L3N0cm9uZz4gQWRkaXRpb25hbCBjcmVkaXRzIGNhbiBiZSBmb3VuZCBpbiBkZXRhaWwgYXQgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lmlycy5nb3YvaW5zdHJ1Y3Rpb25zL2kzODAwXCI+SVJTIEluc3RydWN0aW9ucyBmb3IgRm9ybSAzODAwPC9hPi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIFxyXG4gICAgPHA+V2Ugd291bGQgbGlrZSB0byBhc3Nlc3MgeW91ciBwb3RlbnRpYWwgZWxpZ2liaWxpdHkgZm9yIHRoZXNlIGNyZWRpdHMuIFBsZWFzZSByZXZpZXcgdGhlIGFib3ZlIGxpc3QgYW5kIDxzdHJvbmc+aW5mb3JtIHVzIGlmIHlvdSBiZWxpZXZlIHlvdXIgYnVzaW5lc3MgbWF5IHF1YWxpZnk8L3N0cm9uZz4gZm9yIGFueSBvZiB0aGVtIGJhc2VkIG9uIHlvdXIgY3VycmVudCBvcGVyYXRpb25zIG9yIGZ1dHVyZSBwbGFucy4gQWRkaXRpb25hbGx5LCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNyZWRpdHMgbm90IGxpc3RlZCB0aGF0IHlvdSBiZWxpZXZlIG1heSBhcHBseSB0byB5b3VyIGJ1c2luZXNzLCBsZXQgdXMga25vdy48L3A+XHJcbiAgICBcclxuICAgIDxwPllvdXIgaW5zaWdodHMgd2lsbCBncmVhdGx5IGFzc2lzdCB1cyBpbiBlbnN1cmluZyB3ZSBleHBsb3JlIGFsbCBhdmVudWVzIHRvIHJlZHVjZSB5b3VyIHRheCBsaWFiaWxpdHkgYW5kIGNhcGl0YWxpemUgb24gYXZhaWxhYmxlIGNyZWRpdHMuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiBhbnkgb2YgdGhlc2UgY3JlZGl0cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCdXNpbmVzcyBBc3NldHMgU29sZFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIHdvcmsgdG8gZGlsaWdlbnRseSBwcmVwYXJlIHlvdXIgYnVzaW5lc3PigJlzIHRheCBkb2N1bWVudGF0aW9uLCB3ZSBuZWVkIHRvIGVuc3VyZSBjb21wbGV0ZW5lc3MgYW5kIGFjY3VyYWN5IGluIHJlcG9ydGluZyBhbGwgcmVsZXZhbnQgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBvY2N1cnJlZCB3aXRoaW4gdGhlIHRheCB5ZWFyLiBBbiBpbXBvcnRhbnQgYXJlYSBvZiBmb2N1cyBpcyB0aGUgc2FsZSBvZiBhbnkgYnVzaW5lc3MgYXNzZXRzLiBUaGlzIGluY2x1ZGVzIGJvdGggYXNzZXRzIGFjdGl2ZWx5IGluIHVzZSBhbmQgdGhvc2UgdGhhdCBoYXZlIGJlZW4gcHJldmlvdXNseSBkZXByZWNpYXRlZC48L3A+XHJcblxyXG4gICAgPHA+VGhlIHNhbGUgb2YgYnVzaW5lc3MgYXNzZXRzIGNhbiBoYXZlIHNpZ25pZmljYW50IHRheCBpbXBsaWNhdGlvbnMsIGluY2x1ZGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMsIHJlY2FwdHVyZSBvZiBkZXByZWNpYXRpb24sIGFuZCBpbXBhY3RzIG9uIHlvdXIgYnVzaW5lc3PigJlzIGNhc2ggZmxvdyBhbmQgZmluYW5jaWFsIHN0YXRlbWVudHMuIEFjY29yZGluZ2x5LCBpdCBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gdGhlIElSUy48L3A+XHJcbiAgICBcclxuICAgIDxwPlBsZWFzZSBjb25maXJtIGlmIHlvdXIgYnVzaW5lc3MgaGFzIHNvbGQgYW55IGFzc2V0cyBkdXJpbmcgdGhlIGN1cnJlbnQgdGF4IHBlcmlvZCBieSBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICBcclxuICAgIDx1bD5cclxuICAgICAgPGxpPjxzdHJvbmc+QXNzZXQgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBhc3NldCBzb2xkIChlLmcuLCBlcXVpcG1lbnQsIHByb3BlcnR5LCB2ZWhpY2xlcykuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJvY2VlZHM6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgbW9uZXkgcmVjZWl2ZWQgZnJvbSB0aGUgc2FsZSBvZiBlYWNoIGFzc2V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPk9yaWdpbmFsIFB1cmNoYXNlIFByaWNlIGFuZCBEYXRlOjwvc3Ryb25nPiBUaGUgb3JpZ2luYWwgcHVyY2hhc2UgcHJpY2UgYW5kIHB1cmNoYXNlIGRhdGUgZm9yIGVhY2ggYXNzZXQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QWNjdW11bGF0ZWQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBUaGUgdG90YWwgZGVwcmVjaWF0aW9uIGNsYWltZWQgb24gZWFjaCBhc3NldCB1cCB0byB0aGUgcG9pbnQgb2Ygc2FsZS48L2xpPlxyXG4gICAgPC91bD5cclxuICAgIFxyXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHNvbGQgYW55IGJ1c2luZXNzIGFzc2V0cyBkdXJpbmcgdGhpcyBwZXJpb2QsIHBsZWFzZSBjb25maXJtIHRoaXMgYXMgd2VsbC4gWW91ciB0aW1lbHkgcmVzcG9uc2UgdG8gdGhpcyBpbnF1aXJ5IGlzIGNydWNpYWwgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICBcclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPlxyXG4gICAgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG5dO1xyXG4iXX0=